Common Lisp provides a representation of most objects in the form
of printed text called the printed representation.
Functions such as print
take an object
and send the characters of its printed representation to a stream.
The collection of routines that does this is known as the (Common Lisp) printer.
Reading a printed representation
typically
produces an object that is equal
to the
originally printed object.
Most objects have more than one possible textual representation. For example, the positive integer with a magnitude of twenty-seven can be textually expressed in any of these ways:
27 27. #o33 #x1B #b11011 #.(* 3 3 3) 81/3
A list containing the two symbols A
and B
can also be textually
expressed in a variety of ways:
(A B) (a b) ( a b ) (\A |B|) (|\A| B )
In general, from the point of view of the Lisp reader, wherever whitespace is permissible in a textual representation, any number of spaces and newlines can appear in standard syntax.
When a function such as print
produces a printed representation,
it must choose
from among many possible textual representations.
In most cases, it chooses a
program readable representation,
but in certain cases it might use a more compact notation that is not
program-readable.
A number of option variables, called printer control variables, are provided to permit control of individual aspects of the printed representation of objects. The next figure shows the standardized printer control variables; there might also be implementation-defined printer control variables.
|
Figure 22.1: Standardized Printer Control Variables
In addition to the printer control variables, the following additional defined names relate to or affect the behavior of the Lisp printer:
|
Figure 22.2: Additional Influences on the Lisp printer.
The variable *print-escape*
controls whether the Lisp printer
tries to produce notations such as escape characters and package prefixes.
The variable *print-readably*
can be used to override
many of the individual aspects controlled by the other
printer control variables when program-readable output
is especially important.
One of the many effects of making the value of *print-readably*
be true
is that the Lisp printer behaves as if *print-escape*
were also true.
For notational convenience, we say that
if the value of either *print-readably*
or *print-escape*
is true,
then printer escaping is “enabled”;
and we say that
if the values of both *print-readably*
and *print-escape*
are false,
then printer escaping is “disabled”.