我创建了一个在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)
由于是什么的Lisp-1和Lisp-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,斯卡拉或Clojure的其他语言不同的原因是什么?
相关的问题:
- elisp的函数作为参数并作为返回值
- elisp的交互功能名称
- 如何创建的Emacs Lisp临时函数
- 在elisp的,我怎么把一个函数的变量?