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!
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.