我很难理解Scheme中的符号。以下让我感到困惑:
1 ]=> (symbol? 'x)
; Value: #t
1 ]=> (symbol? '('x))
; Value: #f
我以为我理解为什么第一个是符号,但为什么'('x))
不是?有人可以解释一下原因吗?
为了它的价值,我正在运行MIT / GNU Scheme。
答案 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)
是一个数字列表。
我不确定是什么让你失望,但它可能是'
。 '
可用于制作符号,也可用于制作列表和其他内容。并非以'
开头的所有内容都是符号。