理系学生日記

おまえはいつまで学生気分なのか

問題1.6

(define (new-if predicate then-clause else-clause)
  (cond (predicate then-clause)
        (else else-clause)))

(define (sqrt-iter guess x)
  (new-if (good-enough? guess x)
          guess
          (sqrt-iter (improve guess x)
                      x)))

特殊形式でないnew-ifを使うと、good-enough?の分岐前にelse-clauseが評価される。else-clauseは再帰であるために、else-clauseが評価され続ける無限ループにおちいる。