Funktionen höherer Ordnung in Elisp

8

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:

Mirzhan Irkegulov 07.10.2012, 20:16
quelle

3 Antworten

9

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%     
Gareth Rees 07.10.2012, 20:55
quelle
4
  

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.

    
geocar 07.10.2012 20:32
quelle