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
This predicate tests whether its argument is a macro, and returns
t if so,
Copyright © 1990-1996, 1998-2019 Free Software Foundation, Inc.
Licensed under the GNU GPL license.