我对'
球拍标志的含义有点困惑。在我看来,同一个符号有不同的含义。看下面两个简单的例子:
返回一个新分配的列表,其中包含 vs 作为其元素。
> (list 1 2 3 4)
'(1 2 3 4)
产生一个对应于数据(即程序片段的表示)的常量值,没有它的词法信息、源位置等。引用的对、向量和框是不可变的。
> '(1 2 3 4)
'(1 2 3 4)
所以我的问题是:'
符号是否有 2 个含义(符号和列表)或者它们是相同的数据类型并且list
实际上返回一个带引号的常量值?如果是第二种情况,为什么这样做:
> '(+ (- 2 13) 11)
'(+ (- 2 13) 11)
> (eval (list + (- 2 13) 11))
0
(也(eval '(+ (- 2 13) 11))
适用并正确评估为0
)
但这不会:
> (list + (- 2 13) 11)
'(#<procedure:+> -11 11)
> (eval '(#<procedure:+> -11 11))
. read: bad syntax `#<'
可能相关: Lisp / Scheme中的'(撇号)是什么?