elisp: Macro Forms

 
 9.2.6 Lisp Macro Evaluation
 ---------------------------
 
 If the first element of a list being evaluated is a macro object, then
 the list is a “macro call”.  When a macro call is evaluated, the
 elements of the rest of the list are _not_ initially evaluated.
 Instead, these elements themselves are used as the arguments of the
 macro.  The macro definition computes a replacement form, called the
 “expansion” of the macro, to be evaluated in place of the original form.
 The expansion may be any sort of form: a self-evaluating constant, a
 symbol, or a list.  If the expansion is itself a macro call, this
 process of expansion repeats until some other sort of form results.
 
    Ordinary evaluation of a macro call finishes by evaluating the
 expansion.  However, the macro expansion is not necessarily evaluated
 right away, or at all, because other programs also expand macro calls,
 and they may or may not evaluate the expansions.
 
    Normally, the argument expressions are not evaluated as part of
 computing the macro expansion, but instead appear as part of the
 expansion, so they are computed when the expansion is evaluated.
 
    For example, given a macro defined as follows:
 
      (defmacro cadr (x)
        (list 'car (list 'cdr x)))
 
 an expression such as ‘(cadr (assq 'handler list))’ is a macro call, and
 its expansion is:
 
      (car (cdr (assq 'handler list)))
 
 Note that the argument ‘(assq 'handler list)’ appears in the expansion.
 
    SeeMacros, for a complete description of Emacs Lisp macros.