我想知道为什么我看到的大多数Common Lisp代码都有类似的东西
(mapcar #'(lambda (x) (* x x)) '(1 2 3))
而不仅仅是
(mapcar (lambda (x) (* x x)) '(1 2 3)),
这似乎也有效.我开始学习Common Lisp,并且在Scheme中有一些背景,这引起了我的兴趣.
编辑:我知道您需要带有函数名称的#',因为它们与变量位于不同的命名空间中.我的问题只是在lambda之前的#',因为lambda已经返回一个函数对象(我认为).#' - 由于宏扩展而减少lambdas的工作只会让它变得更有趣......
为什么这不起作用?
( ((lambda () (lambda (x) (funcall #'1+ x)))) 2)
; yields Compile-time error: illegal function call
Run Code Online (Sandbox Code Playgroud)
我遇到了这样的情况,后来发现它funcall修复了它,即
(funcall ((lambda () (lambda (x) (funcall #'1+ x)))) 2) ; => 3
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为它似乎第一个应该工作,因为我实际上有一个我正在调用的函数,而不仅仅是一个可能属于任一命名空间的符号(即(type-of ((lambda () #'1+))) ; => FUNCTION).我认为这将是那种喜欢你怎么不需要以funcall拉姆达例如,如((lambda (x) x) :HI) ; => :HI.我错过了什么?