我习惯于(quote x)
评估 to x
、(quote (x y z))
评估 to(x y z)
和(car (quote (x y z))
评估 to x
。推理很简单:quote 是一种特殊形式,它不评估其参数,而只是按原样返回它。
我刚开始使用 Racket,它认为(quote x)
评估为(quote x)
,(quote (x y z))
评估为(quote (x y z))
,(car (quote (x y z))
评估为(quote x)
。
好吧,实际上,它分别将这些打印为'x
、'(x y z)
和'x
,但这是同一回事。
有人可以在这里解释原因吗?如果由于某种原因(quote (x y z))
评估为(quote (x y z))
,那么那辆车不应该是quote
吗?从哪里来(quote x)
?
据我所知,在整个计算过程中,Racket 的内部行为与我习惯的一样,只是在打印最终结果时,它会将其包装在报价形式中。这在所有情况下都正确吗?如果是这样,它为什么要这样做?