我很难理解 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)
是数字列表。
我不确定到底是什么让你失望,但它可能是'
. '
可以用来制作符号,也可以用来制作列表和其他东西。不是所有以它开头的东西'
都是一个符号。