Функции высшего порядка в Элиспе
Я создал функцию, которая возвращает функцию в 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 функционирует как параметры и как возвращаемое значениеНазвание интерактивной функции ElispКак создать временную функцию в Emacs LispВ elisp, как поместить функцию в переменную?