理解Scheme中的符号

时间:2012-05-19 15:02:33

标签: scheme symbols sicp

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

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

我以为我理解为什么第一个是符号,但为什么'('x))不是?有人可以解释一下原因吗?

为了它的价值,我正在运行MIT / GNU Scheme。

2 个答案:

答案 0 :(得分:4)

方案'...(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)))的缩写。

评估列表((quote x))。在大多数方案中都是如此 打印为('x)

答案 1 :(得分:1)

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

我不确定是什么让你失望,但它可能是''可用于制作符号,也可用于制作列表和其他内容。并非以'开头的所有内容都是符号。