我是初学者Scheme程序员,我想丰富我在函数式编程方面的知识.我在DrRacket IDE中编程.最近我发现了一些有趣的代码:
(car ''(a b))
输出:
'quote
任何人都可以解释我为什么以这种方式进行评估?
这是因为'
它的缩写(quote ...)
.所以,
(car ''(a b))
实际上是
(car (quote (quote (a b))))
评估结果为:
'quote
正如Josh在评论中指出的那样,实际结果只是quote
和REPL打印的表达式可以quote
在这种情况下评估'quote
或者与上面看到的相同(quote quote)
.
请记住'x
(对于任何表达式x
)只是简写(quote x)
,所以这段代码:
(car ''(a b))
相当于这一个:
(car (quote (quote (a b))))
现在很容易看出你正在评估car
一个如下所示的列表:
'(quote (a b))
哪个得到评估:
(list 'quote (list 'a 'b))
如果我们使用car
上面的行,我们将得到符号quote
,这正是您看到的打印结果.