Common Lisp Extensions
8.2 Creating Symbols
These functions create unique symbols, typically for use as
temporary variables.
- Function: gensym &optional x
- This function creates a new, uninterned symbol (using
make-symbol)
with a unique name. (The name of an uninterned symbol is relevant
only if the symbol is printed.) By default, the name is generated
from an increasing sequence of numbers, `G1000', `G1001',
`G1002', etc. If the optional argument x is a string, that
string is used as a prefix instead of `G'. Uninterned symbols
are used in macro expansions for temporary variables, to ensure that
their names will not conflict with "real" variables in the user's
code.
- Variable: *gensym-counter*
- This variable holds the counter used to generate
gensym names.
It is incremented after each use by gensym. In Common Lisp
this is initialized with 0, but this package initializes it with a
random (time-dependent) value to avoid trouble when two files that
each used gensym in their compilation are loaded together.
(Uninterned symbols become interned when the compiler writes them
out to a file and the Emacs loader loads them, so their names have to
be treated a bit more carefully than in Common Lisp where uninterned
symbols remain uninterned after loading.)
- Function: gentemp &optional x
- This function is like
gensym, except that it produces a new
interned symbol. If the symbol that is generated already
exists, the function keeps incrementing the counter and trying
again until a new symbol is generated.
The Quiroz `cl.el' package also defined a defkeyword
form for creating self-quoting keyword symbols. This package
automatically creates all keywords that are called for by
&key argument specifiers, and discourages the use of
keywords as data unrelated to keyword arguments, so the
defkeyword form has been discontinued.