* [`format`](src/prolog/lib/format.pl)
The nonterminal `format_//2` is used to describe formatted output,
arranging arguments according to a given format string.
- The predicates `format/2`, `portray_clause/1` and `listing/1`
+ The predicates `format/[2,3]`, `portray_clause/1` and `listing/1`
provide formatted *impure* output.
* [`assoc`](src/prolog/lib/assoc.pl)
providing `empty_assoc/1`, `get_assoc/3`, `put_assoc/4` etc.
The predicate format/2 is like format_//2, except that it outputs
the text on the terminal instead of describing it declaratively.
+ format/3, used as format(Stream, FormatString, Arguments), outputs
+ the described string to the given Stream. If Stream is a binary
+ stream, then the code of each emitted character must be in 0..255.
+
If at all possible, format_//2 should be used, to stress pure parts
that enable easy testing etc. If necessary, you can emit the list Ls
with maplist(write, Ls).
:- module(format, [format_//2,
format/2,
+ format/3,
portray_clause/1,
listing/1
]).
phrase(format_(Fs, Args), Cs),
maplist(write, Cs).
+format(Stream, Fs, Args) :-
+ phrase(format_(Fs, Args), Cs),
+ ( stream_property(Stream, type(binary)) ->
+ maplist(char_code, Cs, Bytes),
+ maplist(put_byte(Stream), Bytes)
+ ; maplist(put_char(Stream), Cs)
+ ).
+
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
?- phrase(cells("hello", [], 0, []), Cs).