相关疑难解决方法(0)

Emacs lisp:为什么这个sexp会导致无效功能错误?

有问题的性别是

(((lambda (b)
  (lambda (a)
    (+ b a))) 3) 5)
Run Code Online (Sandbox Code Playgroud)

对我来说,它看起来应该评估8,并且在其他lisps(例如Racket)中它确实如此,但在elisp中它反而抛出了这个错误:

Debugger entered--Lisp error: (invalid-function ((lambda (b) (lambda (a) (+ b a))) 3))
Run Code Online (Sandbox Code Playgroud)

它似乎在告诉我

((lambda (b)
  (lambda (a)
    (+ b a))) 3)
Run Code Online (Sandbox Code Playgroud)

不是有效的功能.这似乎是错误的,因为当我评估那个表达式时,我得到了

(lambda (a) (+ b a))
Run Code Online (Sandbox Code Playgroud)

这看起来对我来说是一个有效的功能.有谁知道为什么会这样?它与动态范围有关吗?

lisp elisp lexical-closures dynamic-scope lexical-scope

7
推荐指数
1
解决办法
1715
查看次数