Warum nicht Lambda zitieren?

8

Mir wurde gesagt, dass ich Lambda nicht sagen sollte, sagen wir

%Vor%

Ich habe das in der Tat versucht, wenn ich Lambda nicht zitiere, funktioniert es genauso gut

%Vor%

Allerdings verstehe ich nicht, warum letzteres funktioniert (und auch bevorzugt wird, und jetzt, wo letzteres funktioniert, warum das erste auch funktioniert).

Wenn der Lambda-Ausdruck als eine andere Funktion definiert ist, hätten wir

aufgerufen %Vor%

um zu verhindern, dass meine Funktion sofort ausgewertet wird. Ich verstehe den Lambda-Ausdruck als eine anonyme Version meiner Funktion. Also warum sollte Lambda nicht zitiert werden?

Danke!

    
Yi Wang 06.01.2014, 10:49
quelle

1 Antwort

9

Verwenden von C-h f lambda <RET> :

  

Ein Aufruf des Formulars (Lambda ARGS DOCSTRING INTERACTIVE BODY)   ist selbst zitierend; das Ergebnis der Bewertung der Lambda-Expression   ist der Ausdruck selbst.

Also, das beantwortet die Frage, warum Sie den Lambda-Ausdruck nicht angeben müssen. Warum sollten Sie es nicht tun? Ich denke, das hat mit der Kompilierung von Bytes zu tun. Ein zitierter Lambda-Ausdruck ist einfach Daten. Der Byte-Code-Compiler hat keine andere Wahl, als den Ausdruck als konstantes Listen-Literal in seine Ausgabe aufzunehmen. Ein nicht angeführter Lambda-Ausdruck kann andererseits in Byte-Code kompiliert werden, was zu einer schnelleren Ausführung führt.

Listenliterale der Form (lambda (...) ...) sind in Emacs Lisp-Evaluator speziell eingeordnet und können als Funktionen verwendet werden. Deshalb funktioniert es, unabhängig davon, ob Sie den Lambda-Ausdruck angeben oder nicht.

    
Dirk 06.01.2014, 11:00
quelle

Tags und Links