1

我很难理解 Scheme 中的符号。以下让我感到困惑:

1 ]=> (symbol? 'x)
; Value: #t    
1 ]=> (symbol? '('x))
; Value: #f

我以为我明白为什么第一个是符号,但为什么'('x))不是呢?有人可以解释为什么吗?

对于它的价值,我正在运行 MIT/GNU Scheme。

4

2 回答 2

4

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).

于 2012-05-19T15:36:26.480 回答
1

'('x)是一个列表,而不是一个符号。Scheme 中的符号是字母数字的,就像变量和关键字一样。符号也是如此'a, 也是'supercalafragalistic,但是'(1 2 3)是数字列表。

我不确定到底是什么让你失望,但它可能是'. '可以用来制作符号,也可以用来制作列表和其他东西。不是所有以它开头的东西'都是一个符号。

于 2012-05-19T15:21:59.310 回答