【发布时间】:2016-08-26 23:55:47
【问题描述】:
为什么这不起作用?
( ((lambda () (lambda (x) (funcall #'1+ x)))) 2)
; yields Compile-time error: illegal function call
我遇到了这样的情况,后来发现funcall 修复了它,即
(funcall ((lambda () (lambda (x) (funcall #'1+ x)))) 2) ; => 3
我很困惑,因为看起来第一个应该可以工作,因为我实际上有一个我正在调用的函数,而不仅仅是一个可能属于任一命名空间的符号(即(type-of ((lambda () #'1+))) ; => FUNCTION)。我认为这有点像您不需要需要到funcall 一个 lambda,例如((lambda (x) x) :HI) ; => :HI。我错过了什么?
【问题讨论】:
-
也看看When to use #' (function) in front of lambda expressions? 问题略有不同,但大部分答案都适用,并且引用了超规范的相关部分为什么
((lambda (x) (+ 2 x)) 40) => 42有效。
标签: common-lisp lisp-2