首页 文章

SICP练习1.5和1.6

提问于
浏览
6

除了问题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 回答

  • 9

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

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

  • 3

    在第一行使用带有#lang方案指令的DrRacket,我就这样试了......

    ;say "hi" to Ben Bitdiddle
    
    (define (q) (display "Hello?...Ben?)
    
    (define (test x y)
    (if (= x 0) 
        0
        y))
    

    然后我使用DrRacket 5.3调试工具逐步完成评估 .
    这显然是应用订单评估 .

    Eval窗口显示 - >你好? ......本?然后是0 cuz DrRacket在输入“if”之前评估对(q)的调用 .

相关问题