Ich versuche Lisp zu lernen, aber ich bin bei diesem Beispiel hängengeblieben (Sie finden es auf "ANSI Common Lisp" von Paul Graham, Seite 170):
%Vor%Graham sagt dann:
%Vor%Das zweite Makro [...]
in
gibttrue
zurück, wenn das erste Argumenteql
zu einem der anderen Argumente ist. Der Ausdruck, den wir schreiben können als:
%Vor%müssten wir sonst als
schreiben
Warum sollte ich ein Makro schreiben, wenn die folgende Funktion, die ich geschrieben habe, sich ähnlich verhält?
%Vor% Ich verstehe nicht, ob etwas fehlt oder in diesem Fall in-func
entspricht in
.
Der Unterschied bei der Verwendung der Makrofunktion besteht darin, ob alle Auswahlmöglichkeiten immer ausgewertet werden.
Das erweiterte in
-Makro wertet die Auswahl sequenziell aus. Wenn es eine Auswahl erreicht, die gleich dem ersten Argument ist, gibt es einen wahren Wert zurück, ohne es zu bewerten
Formen.
Im Gegensatz dazu wird die Funktion in-func
alle Auswahlen zum Zeitpunkt des Aufrufs der Funktion auswerten.
Die zwei anderen Antworten sind richtig, aber um die Dinge konkreter zu machen, bedenken Sie diese Interaktion:
%Vor%Tags und Links macros function lisp common-lisp