以下是 SICP 的练习。我自己无法弄清楚。一些为什么可以帮助我理解?
在解释器中输入以下代码:
(car ''abracadabra)
它打印出'报价'。为什么?
正如 gimpf 所说,'abracadabra = (quote abracadabra)。您可以通过在 REPL 中键入 ''abracadabra 来验证这一点,这将打印 (quote abracadabra)。
因为 ''abracadabra 真的是 (quote (quote abracadabra))。在 Scheme 中,规则是:计算 s 表达式的所有部分,并将第一部分应用于其余部分。
“汽车”和“报价”是下面的符号。#car 和 #quote 是它们引用的函数。
如果你拿
(car (quote (quote abracadabra)))
并评估零件,你得到
(#car (quote abracadabra))
然后,将第一部分(汽车功能)应用于第二部分(两个符号的列表)。
quote
你得到的只是符号“报价”。
请记住,要弄清楚 Scheme 中发生了什么,请评估各个部分并将第一个应用于其余部分。如果你评估报价,你就会得到里面的东西。唯一令人困惑的部分是一些原语(数字和字符串)评估自己。