Ich habe eine Funktion erstellt, die eine Funktion in Elisp zurückgibt:
%Vor%Ich versuche, dies in IELM auszuführen, und es schlägt fehl:
%Vor%Aufgrund von Was ist der Unterschied zwischen Lisp-1 und Lisp-2? habe ich den Code in
%Vor% Und Aufruf an (funcall (singleton-set 5) 5)
, aber jetzt ist der Fehler
*** Eval error *** Symbol's value as variable is void: elem
Ich verstehe aus elisp: Erfassung der Variablen aus der inneren Funktion , dass dies auf die dynamische Bindung von Emacs Lisp zurückzuführen ist. p>
Wie macht man Funktionen, die Funktionen in Emacs Lisp zurückgeben? Was ist der Grund, warum sich dieser Mechanismus von anderen Sprachen wie Python, Scala oder Clojure unterscheidet?
Verwandte Fragen:
Von NEWS
für Emacs 24:
Lisp ändert sich in Emacs 24.1
- Code kann jetzt lexikalisches Scoping anstelle des dynamischen Scoping verwenden. Die Variable
lexical-binding
aktiviert lexikalisches Scoping für local Variablen. Es wird normalerweise über eine Datei lokale Variable in der ersten festgelegt Zeile der Datei, in diesem Fall gilt es für den gesamten Code in diesem Datei.
Also, in Emacs 24:
%Vor%Wie macht man Funktionen, die Funktionen in Emacs Lisp zurückgeben?
Verwenden von gefälschten Sperrungen und lexical-let
.
Warum unterscheidet sich dieser Mechanismus von anderen Sprachen wie Python, Scala oder Clojure?
Richard Stallman hat diese Frage in einer Zeitung beantwortet, die er vor einiger Zeit geschrieben hat.
Tags und Links emacs elisp higher-order-functions dynamic-binding