我习惯于(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 的内部行为与我习惯的一样,只是在打印最终结果时,它会将其包装在报价形式中。这在所有情况下都正确吗?如果是这样,它为什么要这样做?