A Lisp symbol is a data object that has three user-visible components:
- The property list is a list that effectively provides each symbol with
many modifiable named components.
- The print name must be a string, which is the sequence of characters
used to identify the symbol. Symbols are of great use because a symbol
can be located once its name is given (typed, say, on a keyboard). One
may ordinarily not alter a symbol’s print name.
It is an error to alter a print name.
- The package cell must refer to a package object. A package is a data
structure used to locate a symbol once given the symbol’s name. A
symbol is uniquely identified by its name only when considered relative
to a package. A symbol may appear in many packages, but it can be
owned by at most one package. The package cell points to the owner,
if any. Package cells are discussed along with packages in chapter 11.
A symbol may actually have other components for use by the implementation.
One of the more important uses of symbols is as names for program variables; it is
frequently desirable for the implementor to use certain components of a symbol to
implement the semantics of variables. See symbol-value and symbol-function.
However, there are several possible implementation strategies, and so such
possible components are not described here.