Next: keyword, Previous: Symbols Dictionary, Up: Symbols Dictionary
symbol, t
Symbols are used for their object identity to name various entities in Common Lisp, including (but not limited to) linguistic entities such as variables and functions.
Symbols can be collected together into packages. A symbol is said to be interned in a package if it is accessible in that package; the same symbol can be interned in more than one package. If a symbol is not interned in any package, it is called uninterned.
An interned symbol is uniquely identifiable by its name from any package in which it is accessible.
Symbols have the following attributes. For historically reasons, these are sometimes referred to as cells, although the actual internal representation of symbols and their attributes is implementation-dependent.
and the consequences are undefined if that name is altered.
The name is used as part of the external, printed representation of the symbol; see Character Syntax. The function symbol-name returns the name of a given symbol.
A symbol may have any character in its name.
When a symbol is first created, it has no home package. When it is first interned, the package in which it is initially interned becomes its home package. The home package of a symbol can be accessed by using the function symbol-package.
If a symbol is uninterned from the package which is its home package, its home package is set to nil. Depending on whether there is another package in which the symbol is interned, the symbol might or might not really be an uninterned symbol. A symbol with no home package is therefore called apparently uninterned.
The consequences are undefined if an attempt is made to alter the home package
of a symbol
external
in the COMMON-LISP package or the KEYWORD package.
The consequences are undefined if an attempt is made to change the value
of a symbol that names a constant variable, or to make such a
symbol be unbound.
The consequences are undefined if an attempt is made to change the functional value of a symbol that names a special form.
Operations on a symbol's value cell and function cell are sometimes described in terms of their effect on the symbol itself, but the user should keep in mind that there is an intimate relationship between the contents of those cells and the global variable or global function definition, respectively.
Symbols are used as identifiers for lexical variables and lexical function definitions, but in that role, only their object identity is significant. Common Lisp provides no operation on a symbol that can have any effect on a lexical variable or on a lexical function definition.
Symbols as Tokens, Potential Numbers as Tokens, Printing Symbols