ADDED: format/3, writing formatted output to a stream
Both binary and text streams are supported.
This commit is contained in:
@@ -353,7 +353,7 @@ The modules that ship with Scryer Prolog are also called
|
|||||||
* [`format`](src/prolog/lib/format.pl)
|
* [`format`](src/prolog/lib/format.pl)
|
||||||
The nonterminal `format_//2` is used to describe formatted output,
|
The nonterminal `format_//2` is used to describe formatted output,
|
||||||
arranging arguments according to a given format string.
|
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.
|
provide formatted *impure* output.
|
||||||
* [`assoc`](src/prolog/lib/assoc.pl)
|
* [`assoc`](src/prolog/lib/assoc.pl)
|
||||||
providing `empty_assoc/1`, `get_assoc/3`, `put_assoc/4` etc.
|
providing `empty_assoc/1`, `get_assoc/3`, `put_assoc/4` etc.
|
||||||
|
|||||||
@@ -49,6 +49,10 @@
|
|||||||
The predicate format/2 is like format_//2, except that it outputs
|
The predicate format/2 is like format_//2, except that it outputs
|
||||||
the text on the terminal instead of describing it declaratively.
|
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
|
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
|
that enable easy testing etc. If necessary, you can emit the list Ls
|
||||||
with maplist(write, Ls).
|
with maplist(write, Ls).
|
||||||
@@ -68,6 +72,7 @@
|
|||||||
|
|
||||||
:- module(format, [format_//2,
|
:- module(format, [format_//2,
|
||||||
format/2,
|
format/2,
|
||||||
|
format/3,
|
||||||
portray_clause/1,
|
portray_clause/1,
|
||||||
listing/1
|
listing/1
|
||||||
]).
|
]).
|
||||||
@@ -359,6 +364,14 @@ format(Fs, Args) :-
|
|||||||
phrase(format_(Fs, Args), Cs),
|
phrase(format_(Fs, Args), Cs),
|
||||||
maplist(write, 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).
|
?- phrase(cells("hello", [], 0, []), Cs).
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user