19.1 Introduction to Reading and Printing

Reading a Lisp object means parsing a Lisp expression in textual
form and producing a corresponding Lisp object. This is how Lisp
programs get into Lisp from files of Lisp code. We call the text the
read syntax of the object. For example, the text `(a . 5)'
is the read syntax for a cons cell whose CAR is a and whose
CDR is the number 5.

Reading and printing are more or less inverse operations: printing the
object that results from reading a given piece of text often produces
the same text, and reading the text that results from printing an object
usually produces a similar-looking object. For example, printing the
symbol foo produces the text `foo', and reading that text
returns the symbol foo. Printing a list whose elements are
a and b produces the text `(a b)', and reading that
text produces a list (but not the same list) with elements a
and b.

However, these two operations are not precisely inverse to each other.
There are three kinds of exceptions:

Printing can produce text that cannot be read. For example, buffers,
windows, frames, subprocesses and markers print as text that starts
with `#'; if you try to read this text, you get an error. There is
no way to read those data types.

One object can have multiple textual representations. For example,
`1' and `01' represent the same integer, and `(a b)' and
`(a . (b))' represent the same list. Reading will accept any of
the alternatives, but printing must choose one of them.

Comments can appear at certain points in the middle of an object's
read sequence without affecting the result of reading it.