ScalarsTopFunctionsMacros

Macros

Macros provide a facility for extending the base syntax of GOO. The design is based on quasiquote code templates and a simple list pattern matching facility. Macros are currently unhygienic, and users are required to use gensym to avoid name collisions.
 QUASIQUOTE (QUASIQUOTE ,@qq-forms) S
QUOTE with selective evaluation using UNQUOTE and SPLICING-UNQUOTE (cf. Lisp and Scheme's QUASIQUOTE), abbreviated "`".
 UNQUOTE (UNQUOTE ,form) S
evaluates ,form in the midst of a QUASIQUOTE expression, abbreviated ",".
 SPLICING-UNQUOTE (SPLICING-UNQUOTE ,form) S
evaluates ,form in the midst of a QUASIQUOTE expression and splices it in, abbreviated ",@".
 MATCH (MATCH ,exp (,pat ,val) ...) S
evaluates ,val corresponding to first ,pat matching ,exp. The pattern is much the same as QUASIQUOTE and can contain either UNQUOTE'd variables or UNQUOTE-SPLICING variables. For example,
(MATCH '(1 2) ((,a ,b) (lst a b))) $ --> $ (1 2) 
(MATCH '(1 2) ((,a ,@b) (lst a b))) $ --> $ (1 (2))
 DS (DS ,name (,pattern) ,@body) S
defines a macro matching pattern ,pattern and expanding according to ,@body. The pattern matching occurs as in MIF and makes available pattern variables during the evaluation of (SEQ ,@body). For example,
(DS unless (,test ,@body) 
  `(if (not ,test) (seq ,@body)))
defines the when macro in GOO.
where
 pattern == (,@qq-forms) L
 CT (CT ,@body) S
evaluates (SEQ ,@body) at compile-time allowing a user to make available computations for the purpose of macro-expansion.
 CT-ALSO (CT-ALSO ,@body) S
equivalent to CT, but also includes a copy of ,@body in compiled images. Similar to (eval-when (:compile-toplevel :execute) ...) in Common LISP. The return value of CT-ALSO is undefined.
 MACRO-EXPAND (MACRO-EXPAND ,form) S
recursively expands macros in expression ,form.


ScalarsTopFunctionsMacros