[ Term I/O | Reference Manual | Alphabetic Index ]
write_canonical(+Stream, ?Term)
The term Term is written on the output stream Stream in a form that ignores
operator declarations and can be read in.
- Stream
- Stream handle or alias (atom)
- Term
- Prolog term.
Description
   Used to write the term Term in a form that can be read back independent
   of the current operator declarations.  Atoms and strings are quoted,
   operator declarations are ignored, lists are printed as ./2 structures,
   the (stream-specific or global) print_depth flag is not taken into account,
   variable attributes are printed, and variables are printed with unique
   identifiers.
   write_canonical(S,Term) is equivalent to printf(S,"%DMOQv.w", Term)
   or write_term(S,Term, [attributes(full),operators(false),quoted(true),
           dotlists(true),variables(raw),depth(full),transform(false)]).
   Note that as usual, the output is buffered, so it may need to be flushed
   either by closing the stream, by writing again or by using flush/1.
Modes and Determinism
- write_canonical(+, ?) is det
Modules
This predicate is sensitive to its module context (tool predicate, see @/2).
Exceptions
- (4) instantiation fault 
- Stream is not instantiated.
- (5) type error 
- Stream is not an atom or a stream handle.
- (192) illegal stream mode 
- Stream is not an output stream.
- (193) illegal stream specification 
- Stream is an illegal stream specification.
Examples
   Success:
    ?- write_canonical(output, 'A'+[a,B]).
    +('A', .(a, .(_216, [])))
    B = B
    yes.
Error:
    write_canonical(S, a(b,c)).        (Error 4).
    write_canonical("string", a(b,c)). (Error 5).
    write_canonical(input, X + 2).     (Error 192).
    write_canonical(atom, X + 2).      (Error 193).
See Also
write / 1, write / 2, writeq / 1, writeq / 2, write_canonical / 1