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 has
the value x—not the value of x. 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.