SICP练习1.5和1.6

Vas*_*aka 6 scheme sicp racket r5rs

除了质疑SICP中练习1.6的解释是什么?.所以,Racket博士(R5RS)在有限时间内用"if"评估sqrt-iter函数,清楚地显示正常的订单评估.但是,如果我使用练习1.5的例子

(define (p) (p))
(define (test x y)
  (if (= x 0)
      0
      y))
(test 0 (p))
Run Code Online (Sandbox Code Playgroud)

它进入无限循环,使我认为"如果"使用应用程序订单评估.那我在哪里错了?

Ósc*_*pez 10

发生的事情是if永远不会达到:正是因为评估的适用顺序,实际调用之前test得到评估的两个参数,表达式将永远循环.test(p)

如果使用正常顺序评估相同的过程,它将返回零,这就是本示例首先尝试演示的内容.