[ Term I/O | The ECLiPSe Built-In Predicates | 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
  Integer (stream number) or Atom (reserved or user-defined symbolic stream name).
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, "%MOQ.vDw", Term).

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 an integer.
(192) illegal stream mode
  Stream is not an output stream.
(193) illegal stream specification
  Stream is an illegal stream specification.

## Examples

       Success:
        [eclipse 1]: 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