相关疑难解决方法(0)

为什么#'在Common Lisp中的lambda之前使用?

我想知道为什么我看到的大多数Common Lisp代码都有类似的东西

(mapcar #'(lambda (x) (* x x)) '(1 2 3))

而不仅仅是

(mapcar (lambda (x) (* x x)) '(1 2 3)),

这似乎也有效.我开始学习Common Lisp,并且在Scheme中有一些背景,这引起了我的兴趣.

编辑:我知道您需要带有函数名称的#',因为它们与变量位于不同的命名空间中.我的问题只是在lambda之前的#',因为lambda已经返回一个函数对象(我认为).#' - 由于宏扩展而减少lambdas的工作只会让它变得更有趣......

common-lisp

35
推荐指数
2
解决办法
4212
查看次数

为什么我必须执行从另一个函数返回的函数?

为什么这不起作用?

( ((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.我错过了什么?

common-lisp lisp-2

3
推荐指数
2
解决办法
704
查看次数

标签 统计

common-lisp ×2

lisp-2 ×1