Generate code that evaluates certain expressions only once.
This is used in macros, for computing expansions.
VARIABLE-LIST is a list of symbols, whose values are subexpressions
to be substituted into a larger expression. BODY is what uses those
symbols' values and constructs the larger expression.
ONCE-ONLY modifies BODY so that it constructs a different expression,
which when run will evaluate the subsexpressions only once, save the
values in temporary variables, and use those from then on.
(DEFMACRO DOUBLE (ARG)
(+ ,ARG ,ARG)) expands into code that computes ARG twice.<br> (DEFMACRO DOUBLE (ARG) (ONCE-ONLY (ARG) (+ ,ARG ,ARG))) will not.