[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
A Lisp macro is a list whose CAR is macro
. Its CDR should
be a function; expansion of the macro works by applying the function
(with apply
) to the list of unevaluated argument-expressions
from the macro call.
It is possible to use an anonymous Lisp macro just like an anonymous
function, but this is never done, because it does not make sense to pass
an anonymous macro to functionals such as mapcar
. In practice,
all Lisp macros have names, and they are usually defined with the
special form defmacro
.
defmacro
defines the symbol name as a macro that looks
like this:
(macro lambda argument-list . body-forms) |
(Note that the CDR of this list is a function--a lambda expression.)
This macro object is stored in the function cell of name. The
value returned by evaluating the defmacro
form is name, but
usually we ignore this value.
The shape and meaning of argument-list is the same as in a
function, and the keywords &rest
and &optional
may be used
(see section 12.2.3 Other Features of Argument Lists). Macros may have a documentation string, but
any interactive
declaration is ignored since macros cannot be
called interactively.