Unterschied zwischen einer Makrodefinition und einer Funktionsdefinition

8

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:

  

Das zweite Makro [...] in gibt true zurück, wenn das erste Argument eql zu einem der anderen Argumente ist. Der Ausdruck, den wir schreiben können als:

%Vor%
  

müssten wir sonst als

schreiben
%Vor%

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 .

    
vrde 03.05.2011, 23:39
quelle

2 Antworten

7

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.

    
Terje Norderhaug 03.05.2011, 23:52
quelle
3

Die zwei anderen Antworten sind richtig, aber um die Dinge konkreter zu machen, bedenken Sie diese Interaktion:

%Vor%     
Eli Barzilay 04.05.2011 00:08
quelle

Tags und Links