11.3.241 write_term/[2,3] [ISO,hookable]

Synopsis

write_term(+Stream, +Term, +Options)

write_term(+Term, +Options)

Writes Term on the standard output stream, subject to +Options.

Arguments

Stream
stream_object, must be ground

A valid open Prolog stream, defaults to the current output stream.

Term
term
Options
list of term, must be ground

A list of zero or more of the following, where Boolean must be true or false (false is the default).

quoted(Boolean)
If selected, atoms and functors are quoted where necessary to make the result acceptable as input to read/1. write_canonical/1, writeq/1, and portray_clause/1 select this.
ignore_ops(Boolean)
If selected, Term is written in standard parenthesized notation instead of using operators. write_canonical/1 and display/1 select this.
portrayed(Boolean)
If selected, user:portray/1 is called for each non-variable subterm. print/1 selects this.
numbervars(Boolean)
If selected, terms of the form '$VAR'(N) where N is an integer >= 0, an atom, or a code-list, are treated specially (see numbervars/3). print/1, write/1, writeq/1, and portray_clause/1 select this.
cycles(Boolean)
If selected, the potentially cyclic term is printed in finite @/2 notation, as discussed above.
indented(Boolean)
If selected, the term is printed with the same indentation as is used by portray_clause/1 and listing/[0,1].
max_depth(Depth)
Depth limit on printing. Depth is an integer. 0 (the default) means no limit.
quoted_charset(Charset)
Only relevant if quoted(true) holds. Charset should be a legal value of the quoted_charset Prolog flag, where it takes its default value from. write_canonical/1 selects the value portable. See ref-lps-flg.
float_format(Spec)
How to print floats. Spec should be an atom of the form `~NC', like one of the format/[2,3] character sequences for printing floats. The default is `~H'.
priority(Prio)
The term is printed as if in the context of an associative operator of precedence Prio, where Prio is an integer. The default is 1200. See ref-syn-ops.

Description

This predicate subsumes the predicates that output terms except portray_clause/[1,2], which additionally prints a period and a newline, and removes module prefixes that are redundant wrt. the current type-in module.

During debugging, goals are written out by this predicate with options given by the debugger_print_options Prolog flag.

Top-level variable bindings are written out by this predicate with options given by the toplevel_print_options Prolog flag.

Exceptions

Stream errors (see ref-iou-sfh-est), plus:

instantiation_error
type_error
domain_error
in Options.

Examples

How certain options affect the output of write_term/2:

     | ?- write_term('a b', [quoted(true)]).
     'a b'
     
     | ?- write_term(a+b, [ignore_ops(true)]).
     +(a,b)
     
     | ?- write_term(f('$VAR'(2)),
                        [numbervars(true)].)
     f(C)
     
     | ?- write_term(f('$VAR'('C')),
                        [numbervars(true)]).
     
     f(C)

If your intention is to name variables such as that generated by read_term/2 with the variable_names option then this can be done by defining a predicate like:

     var_to_names([]) :- !.
     var_to_names([=(Name,Var)|RestofPairs]) :-
          ( var(Var) ->
               Var = '$VAR'(Name)
          ; true
          ),
          var_to_names(RestofPairs).
     
     | ?- read_term([variable_names(Names)], X),
          var_to_names(Names),
          write_term(X, [numbervars(true)]),
          nl,
          fail.
     |: a(X, Y).
     a(X, Y).
     
     no

See Also

ref-iou-tou, user:portray/1.


Send feedback on this subject.