练习 1.5。 Ben Bitdiddle 发明了一种测试来确定他所面对的解释器是使用应用顺序评估还是正常顺序评估。他定义了以下两个程序:
(定义(p)(p))
(定义(测试 xy)(如果(= x 0)0 y))
然后他评估表达式
(测试 0(p))
对于使用应用顺序评估的解释器,Ben 会观察到什么行为?对于使用正常顺序评估的解释器,他会观察到什么行为?
我理解练习的答案;我的问题在于如何解释 (p) 与 p。例如, (test 0 (p)) 导致解释器挂起(这是预期的),但是具有上述定义的 (test 0 p) 立即计算为 0。为什么?
此外,假设我们将定义更改为 (define (p) p)。根据给定的定义,(test 0 (p)) 和 (test 0 p) 都计算为 0。为什么会发生这种情况?为什么解释器不挂起?我正在使用带有 SICP 包的 Dr. Racket。