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.