Scheme 和 Elisp 函数求值的区别
Difference in function evaluation between Scheme and Elisp
在学习 elisp 时,我尝试了一些我知道可以在 Scheme 中使用的东西,但令我惊讶的是我无法在 Elisp 中复制它。
;; works in Scheme. result: 5
((if 1 + -) 3 2)
;; doesn't work in Elisp. result: error
((if 1 '+ '-) 3 2)
我希望 Elisp 行的计算结果为
(+ 3 2)
并且此列表的评估结果为 5。但是我得到:
(invalid-function (if t '+ '-))
我在这里错过了什么? Elisp 不允许这样的操作吗?这可能与 Scheme 是 lisp-1 语言而 Elisp 是 lisp-2 语言这一事实有关吗?
是的,错误是由于 Emacs Lisp 是 Lisp-2。这应该有效:
(funcall (if 1 '+ '-) 3 2)
在学习 elisp 时,我尝试了一些我知道可以在 Scheme 中使用的东西,但令我惊讶的是我无法在 Elisp 中复制它。
;; works in Scheme. result: 5
((if 1 + -) 3 2)
;; doesn't work in Elisp. result: error
((if 1 '+ '-) 3 2)
我希望 Elisp 行的计算结果为
(+ 3 2)
并且此列表的评估结果为 5。但是我得到:
(invalid-function (if t '+ '-))
我在这里错过了什么? Elisp 不允许这样的操作吗?这可能与 Scheme 是 lisp-1 语言而 Elisp 是 lisp-2 语言这一事实有关吗?
是的,错误是由于 Emacs Lisp 是 Lisp-2。这应该有效:
(funcall (if 1 '+ '-) 3 2)