我创建了一个在 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: capture variable from inner function了解到这是由于 Emacs Lisp 的动态绑定。
如何在 Emacs Lisp 中使函数返回函数成为可能?这种机制与 Python、Scala 或 Clojure 等其他语言不同的原因是什么?
相关问题: