【问题标题】:SICP exercise 1.5 and 1.6SICP 练习 1.5 和 1.6
【发布时间】:2012-09-04 20:52:53
【问题描述】:

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

它进入无限循环,让我觉得“如果”使用了应用顺序评估。 那我哪里错了?

【问题讨论】:

    标签: scheme sicp racket r5rs


    【解决方案1】:

    发生的情况是永远不会达到if:正是由于评估的应用顺序,test 的两个参数在实际调用test 之前得到评估,而表达式@987654324 @ 将永远循环。

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

    【讨论】:

      【解决方案2】:

      在第一行使用带有#lang scheme 指令的 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 因为 DrRacket 在输入“if”之前评估对 (q) 的调用。

      【讨论】:

        猜你喜欢
        • 2012-07-05
        • 2010-11-13
        • 2011-11-05
        • 2017-02-03
        • 2010-12-26
        • 2012-12-15
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多