相关疑难解决方法(0)

普通的lisp中的#'

在Practical Common Lisp一书的第3章中,有一个类似SQL的选择和函数的例子.这是它的简化版本:

(defun where (x) 
   #'(lambda (item)
     (> item x)))
Run Code Online (Sandbox Code Playgroud)

它像这样使用:

(remove-if-not (where 2) (list 1 2 3 4))
Run Code Online (Sandbox Code Playgroud)

在本书的前面部分解释说,#'序列用于表示它后跟一个函数名,而不是一个需要评估的变量.我不明白为什么这里需要它.我尝试在where没有它的情况下实现该功能,它也可以工作:

(defun where (x) 
   (lambda (item)
     (> item x)))
Run Code Online (Sandbox Code Playgroud)

我试着谷歌搜索它,并且,正如你可以想象的那样,通过这样一系列的角色,它不是一个非常有成效的搜索.我不知道这件事的名字.在上面的代码中是否有任何特殊原因需要它?

common-lisp quote

14
推荐指数
2
解决办法
6538
查看次数

为什么funcall会忽略词法范围?

我被这个旧答案中的代码所激怒,解释了为什么需要尖锐的引用,但我不明白为什么funcall似乎跳过了通常的范围规则.

(defun test () 'red)

(flet ((test () 'green))
  (list (funcall 'test)
        (funcall #'test))) => (red green)
Run Code Online (Sandbox Code Playgroud)

我是否应该将Common Lisp理解为具有由let-family函数设置的"本地"词法范围符号绑定和由de-family函数设置的全局范围变量符号绑定?

lisp common-lisp

0
推荐指数
1
解决办法
104
查看次数

标签 统计

common-lisp ×2

lisp ×1

quote ×1