GNU Emacs Lisp Reference Manual
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.