Macro Once-Only

Part of:

package metabang.utilities
( once-only < variable-list > &body < body > )

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.
Example:
(DEFMACRO DOUBLE (ARG) (+ ,ARG ,ARG)) expands into code that computes ARG twice.<br>(DEFMACRO DOUBLE (ARG) (ONCE-ONLY (ARG) (+ ,ARG ,ARG))) will not.