我很难理解 Scheme 中的符号。以下让我感到困惑:
1 ]=> (symbol? 'x)
; Value: #t
1 ]=> (symbol? '('x))
; Value: #f
我以为我明白为什么第一个是符号,但为什么'('x))不是呢?有人可以解释为什么吗?
对于它的价值,我正在运行 MIT/GNU Scheme。
In scheme'...是(quote ...).
因此'x是 的简写(quote x)。并且'(1 2 3)是速记(quote (1 2 3))。
计算引用表达式时,引用的值不会作为表达式计算,而只是简单地返回。
引用的(quote x)是符号。x所以(quote x)计算为符号x。
(quote (1 2 3))引用的值是一个列表。它评估为(1 2 3)。
在您稍微复杂的示例中,您有
'('x) 这是 的简写(quote ((quote x)))。
这将评估为 list ((quote x))。在大多数方案中打印为('x).
'('x)是一个列表,而不是一个符号。Scheme 中的符号是字母数字的,就像变量和关键字一样。符号也是如此'a, 也是'supercalafragalistic,但是'(1 2 3)是数字列表。
我不确定到底是什么让你失望,但它可能是'. '可以用来制作符号,也可以用来制作列表和其他东西。不是所有以它开头的东西'都是一个符号。