14.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.