elisp: Simple Macro
13.1 A Simple Example of a Macro
================================
Suppose we would like to define a Lisp construct to increment a variable
value, much like the ‘++’ operator in C. We would like to write ‘(inc
x)’ and have the effect of ‘(setq x (1+ x))’. Here’s a macro definition
that does the job:
(defmacro inc (var)
(list 'setq var (list '1+ var)))
When this is called with ‘(inc x)’, the argument VAR is the symbol
‘x’—_not_ the _value_ of ‘x’, as it would be in a function. The body of
the macro uses this to construct the expansion, which is ‘(setq x (1+
x))’. Once the macro definition returns this expansion, Lisp proceeds
to evaluate it, thus incrementing ‘x’.
-- Function: macrop object
This predicate tests whether its argument is a macro, and returns
‘t’ if so, ‘nil’ otherwise.