2

以下是 SICP 的练习。我自己无法弄清楚。一些为什么可以帮助我理解?

在解释器中输入以下代码:

(car ''abracadabra)

它打印出'报价'。为什么?

4

2 回答 2

6

正如 gimpf 所说,'abracadabra = (quote abracadabra)。您可以通过在 REPL 中键入 ''abracadabra 来验证这一点,这将打印 (quote abracadabra)。

于 2009-09-10T13:25:26.087 回答
0

因为 ''abracadabra 真的是 (quote (quote abracadabra))。在 Scheme 中,规则是:计算 s 表达式的所有部分,并将第一部分应用于其余部分。

“汽车”和“报价”是下面的符号。#car 和 #quote 是它们引用的函数。

如果你拿

(car (quote (quote abracadabra)))

并评估零件,你得到

(#car (quote abracadabra))

然后,将第一部分(汽车功能)应用于第二部分(两个符号的列表)。

quote

你得到的只是符号“报价”。

请记住,要弄清楚 Scheme 中发生了什么,请评估各个部分并将第一个应用于其余部分。如果你评估报价,你就会得到里面的东西。唯一令人困惑的部分是一些原语(数字和字符串)评估自己。

于 2010-08-09T19:16:52.130 回答