Scheme和Elisp功能评估的差异

Ruv*_*enS 3 lisp emacs scheme elisp

在学习 elisp 时,我尝试了一些我知道在 Scheme 中有效的东西,但令我惊讶的是我无法在 Elisp 中复制它。

;; works in Scheme. result: 5
((if 1 + -) 3 2)

;; doesn't work in Elisp. result: error
((if 1 '+ '-) 3 2)
Run Code Online (Sandbox Code Playgroud)

我希望 Elisp 线的评估结果为

(+ 3 2)
Run Code Online (Sandbox Code Playgroud)

并且该列表的评估结果为 5。但是我得到:

(invalid-function (if t '+ '-))
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?难道 Elisp 不允许这样的行为吗?这是否可能与Scheme是lisp-1语言而Elisp是lisp-2这一事实有关?

Ósc*_*pez 5

是的,该错误是由于 Emacs Lisp 是 Lisp-2 造成的。这应该有效:

(funcall (if 1 '+ '-) 3 2)
Run Code Online (Sandbox Code Playgroud)