Hier ist zum Beispiel ein Makro:
%Vor% und (my-macro 2 3)
gibt (lambda (z) (+ z 3))
Jedoch gibt ((my-macro 2 3) 1)
einen Fehler zurück, der besagt,
Was vermisse ich?
Emacs Lisp benötigt das erste Element einer Liste Formular eine eingebaute Funktion sein (oder subr ) , ein Lambda-Ausdruck (dh (lambda LIST . LIST)
) oder ein Makro-Lambda-Ausdruck (dh% Code%). Das erste Element kann auch ein -Symbol sein, dessen Funktion Slot enthält ein gültiges erstes Element.
(macro lambda LIST . LIST)
hat nicht die erforderliche Form, daher ist es eine ungültige Funktion.
Wenn Sie an Scheme gewöhnt sind, wo der Funktionsteil eines Funktionsaufrufs normal ausgewertet wird, beachten Sie, dass dies in Lisp nicht identisch funktionieren kann, wenn Funktionen einen anderen Namensraum haben ( (my-macro 2 3)
sucht (f 3)
s nach) Funktions-Slot, während der Wert von f
normalerweise sein Wert slot ist.
Wenn Sie eine Funktion wie einen normalen Wert auswerten möchten, können Sie f
oder funcall
.