| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [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
(voir la section Other Features of Argument Lists). Macros may have a documentation string, but any
interactive declaration is ignored since macros cannot be called
interactively.
The body of the macro definition can include a declare form, which
can specify how <TAB> should indent macro calls, and how to step through
them for Edebug.
A declare form is used in a macro definition to specify various
additional information about it. Two kinds of specification are currently
supported:
(debug edebug-form-spec)Specify how to step through macro calls for Edebug. Voir la section Instrumenting Macro Calls.
(indent indent-spec)Specify how to indent calls to this macro. Voir la section Indenting Macros, for more details.
A declare form only has its special effect in the body of a
defmacro form if it immediately follows the documentation string, if
present, or the argument list otherwise. (Strictly speaking, several
declare forms can follow the documentation string or argument list,
but since a declare form can have several specs, they can
always be combined into a single form.) When used at other places in a
defmacro form, or outside a defmacro form, declare just
returns nil without evaluating any specs.
No macro absolutely needs a declare form, because that form has no
effect on how the macro expands, on what the macro means in the program. It
only affects secondary features: indentation and Edebug.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.