Module: builtins

sprintf/3 — formatted write to atoms and strings
bufwrite/2 — formatted write to strings
bufwriteq/2 — formatted write to strings with quoting


sprintf(Target, Format, Args)

bufwrite(String, Term)

bufwriteq(String, Term)


sprintf/3 is very similar to printf/3, except that instead of writing the formatted out put to a stream, sprintf/3 writes the output to either a Prolog atom or string. The Format and Args arguments are identical to the corresponding arguments for printf/3. The Target argument can be an uninstantiated variable, or can be of one of the forms atom(A), string(S), or list(S). In case Target is an uninstantiated variable, on success, Target is a Prolog double-quoted string containing the formatted output. Similarly, if Target is string(S) or list(S), on success, S is a Prolog double-quoted string containing the formatted output. And if Target is atom(A), on success A is an atom containing the formatted output.

bufwrite/2 creates a printed representation of the Term using the operator declaration as write/1 would. However, instead of writing the result to the current output stream, bufwrite/2 converts the printed representation into a list of ASCII codes. bufwriteq/2 behaves similarly to bufwrite/2, but quotes items exactly the way writeq/2 would.


?- sprintf(X, 'Contents: %t, Amount: %t', [pocket(keys),1]).
X = "Contents: pocket(keys), Amount: 1"

?- sprintf(string(X), 'Contents: %t, Amount: %t', [pocket(keys),1]).
X = "Contents: pocket(keys), Amount: 1"

?- sprintf(atom(X), 'Contents: %t, Amount: %t',[pocket(keys),1]).
X = 'Contents: pocket(keys), Amount: 1'
?- bufwrite("jack+f(tom)", +(jack, f(tom))).
?- bufwrite(S, 'Enterprise').
S = [69,110,116,101,114,112,114,105,115,101]