除了问题What's the explanation for Exercise 1.6 in SICP? . 因此,Racket博士(R5RS)在有限时间内使用"if"评估sqrt-iter函数,清楚地显示正常的订单评估 . 但是,如果我使用练习1.5的例子
(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
(test 0 (p))
它进入无限循环,使我认为“如果”使用应用程序订单评估 . 那我在哪里错了?
2 回答
会发生什么是
if
永远不会到达:正是因为评估的应用顺序,test
的两个参数在实际调用test
之前得到了评估,而表达式(p)
将永远循环 .如果使用正常顺序评估相同的过程,它将返回零,这就是本示例首先尝试演示的内容 .
在第一行使用带有#lang方案指令的DrRacket,我就这样试了......
然后我使用DrRacket 5.3调试工具逐步完成评估 .
这显然是应用订单评估 .
Eval窗口显示 - >你好? ......本?然后是0 cuz DrRacket在输入“if”之前评估对(q)的调用 .