defmacro

Mit defmacro lassen sich Macros erzeugen und einem Symbol als Wert zuweisen. Es werden drei Argumente erwartet: das Symbol, dem das neu erzeugte Macro zugewiesen wird, ein zweites Symbol, dieses empfängt beim Aufruf des Macros die unausgewerteten Argumente und schließlich der Rumpf des Macros.

defmacro ist selbst als Macro definiert. Es erzeugt eine Zwischenform der Art (setq <name> (mlambda <arg> <body>)).

(setq defmacro
  (mlambda args
    (if
      (equal? (list-length args) 3)
      (list
        setq
        (first args)
        (list mlambda (second args) (third args)))
      (throw (quote error) "wrong number of arguments for defmacro"))))