* If Term is a variable, it is printed using write/1.
* If Term is a nonvariable or a metaterm, then portray(output, Term) is called. If it succeeds, so does print/1. Otherwise, if Term is atomic, it is written using write/1 and the predicate succeeds. If Term is a compound term, its main functor is printed using write/1 and print/1 is called recursively on its arguments.
If portray/2 is not visible but portray/1 is, it is called instead of portray/2.
Note that when this predicate is used to print a list, only the elements of the list, i.e. the heads, are passed to the recursive calls of print/1, but not the list tails.
portray/1, 2 is used by the system when printing out the answer binding in the top-level loop to the answer_output stream and in the debugger, when the output command is set to print, to the debug_output stream.
As usual, the output is buffered, so it may need to be flushed (e.g. explicitly using flush/1).
Note The output of print/1 is not necessarily in a form acceptable to read/1,2.
Success: [eclipse]: [user]. portray(S, a) :- write(S, b). user compiled 100 bytes in 0.02 seconds yes. [eclipse]: print([a, b, c, d]). [b, b, c, d] yes. [eclipse]: [user]. portray(S, '$VAR'(X)) :- write(S, a_), write(S, X). user compiled 180 bytes in 0.00 seconds yes. [eclipse]: quintus. loading the library /usr/local/ECLIPSE/lib/quintus.pl loading the library /usr/local/ECLIPSE/lib/cprolog.pl loading the library /usr/local/ECLIPSE/lib/cio.pl yes. [eclipse]: numbervars(f(A, B, A, C), 1, X), write(f(A, B, A, C)). f($VAR(1), $VAR(2), $VAR(1), $VAR(3)) B = a_2 % print/2 is used in the top-level loop A = a_1 C = a_3 X = 4 yes.