【发布时间】:2014-02-19 10:13:14
【问题描述】:
我习惯于将(quote x) 评估为x,(quote (x y z)) 评估为(x y z),而(car (quote (x y z)) 评估为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 的内部行为与我习惯的一样,只是在打印最终结果时,它会将其包装在引号中。这在所有情况下都正确吗?如果是这样,它为什么要这样做?
【问题讨论】:
-
请参阅我在 this answer 中的注释:“作为额外的复杂情况,某些系统(我正在考虑某些语言,尤其是 Racket 博士)不会在交互式提示,而是打印一个会产生相同(对于“相同”的某些解释)值的表单。例如,您可以评估 '(1 . 2) 并查看输出 (cons 1 2) 因为那是另一个产生相同值的形式。”
标签: scheme racket quote repl-printed-representation