mlambda

Die Funktion mlambda erzeugt Macros (siehe Macro). Sie erwartet zwei Argumente, ein Symbol und eine S-Expression. Das Symbol ist der Parameter des Macros. Bei der S-Expression handelt es sich um den Rumpf des Macros.

Wenn das Macro angewendet wird, dann wird die Liste der unausgewerteten Argumente an das Symbol gebunden. In der um diese Bindung erweiterte Definitionsumgebung wird der Rumpf des Macros ausgewertet.

Es wird erwartet, dass die Auswertung des Rumpfs eine ausführbare S-Expression erzeugt. Diese S-Expression (die sogenannte Zwischenform) wird in der Aufrufumgebung des Macros ausgewertet.

Das Ergebnis der zweiten Auswertung ist das Ergebnis der Anwendung des Macros.

Weil es mit quasi-quote besonders einfach ist, ausführbare S-Expressions zu erzeugen, werden Macros und quasi-quote oft zusammen verwendet. Das folgende Beispiel verdeutlich dies:

> (setq when
    (mlambda args
      (quasi-quote
        (if
          (unquote (first args))
          (progn
            (unquote (rest args)))
          nil))))
(mlambda args (quasi-quote (if (unquote (first args)) (progn (unquote (rest args))) nil))))

Hier wurde das Macro when definiert. Dieses Macro erwartet zwei oder mehr Argumente. Wenn das erste Argument ungleich nil ist, wird der Wert des zweiten Arguments zum Wert des when-Audrucks. Anderenfalls ist der Wert nil.

> (when t (+ 2 3 4))
9

Das hier gezeigt Beispiel erzeugt die Zwischenform

(if t (progn (+ 2 3 4)) nil),

die, wie oben angegeben, zu 9 ausgewertet wird.