diff --git a/README.md b/README.md index 9c33caea..4cc05b7b 100644 --- a/README.md +++ b/README.md @@ -396,7 +396,7 @@ The modules that ship with Scryer Prolog are also called * [`format`](src/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,3]`, `portray_clause/1` and `listing/1` + The predicates `format/[2,3]`, `portray_clause/[1,2]` and `listing/1` provide formatted *impure* output. * [`assoc`](src/lib/assoc.pl) providing `empty_assoc/1`, `get_assoc/3`, `put_assoc/4` etc. diff --git a/src/lib/format.pl b/src/lib/format.pl index e8be4df3..2e496730 100644 --- a/src/lib/format.pl +++ b/src/lib/format.pl @@ -74,6 +74,7 @@ format/2, format/3, portray_clause/1, + portray_clause/2, listing/1 ]). @@ -465,8 +466,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ portray_clause(Term) :- + current_output(Out), + portray_clause(Out, Term). + +portray_clause(Stream, Term) :- phrase(portray_clause_(Term), Ls), - maplist(write, Ls). + maplist(put_char(Stream), Ls). portray_clause_(Term) --> { term_variables(Term, Vs),