Функции высшего порядка в Элиспе
Я создал функцию, которая возвращает функцию в Elisp:
(defun singleton-set (elem)
(defun f (n) (= n elem))
f)
Я пытаюсь запустить это в IELM, и это не удается:
ELISP> (singleton-set 5)
*** Eval error *** Symbol's value as variable is void: f
ELISP> ((singleton-set 5) 5)
*** Eval error *** Invalid function: (singleton-set 5)
Из-заВ чем разница между Лисп-1 и Лисп-2? я изменил код на
(defun singleton-set (elem)
(defun f (n) (= n elem))
#'f)
И призыв к(funcall (singleton-set 5) 5)
, но теперь ошибка
*** Eval error *** Symbol's value as variable is void: elem
Я понимаю изelisp: захват переменной из внутренней функции что это связано с динамическим связыванием Emacs Lisp.
Как сделать функции, возвращающие функции, возможными в Emacs Lisp? В чем причина того, что этот механизм отличается от других языков, таких как Python, Scala или Clojure?
Смежные вопросы:
elisp functions as parameters and as return value Elisp interactive function name How to Create a Temporary Function in Emacs Lisp In elisp, how do I put a function in a variable?