Exercise 1.6.  Alyssa P. Hacker doesn't see why if needs to be provided as a special form. ``Why
          can't I just define it as an ordinary procedure in terms of cond?'' she asks. Alyssa's friend Eva Lu
          Ator claims this can indeed be done, and she defines a new version of if:
          (define (new-if predicate then-clause else-clause)
            (cond (predicate then-clause)
                  (else else-clause)))
          Eva demonstrates the program for Alyssa:
          (new-if (= 2 3) 0 5)
          5
          (new-if (= 1 1) 0 5)
          0
          Delighted, Alyssa uses new-if to rewrite the square-root program:
          32(define (sqrt-iter guess x)
            (new-if (good-enough? guess x)
                    guess
                    (sqrt-iter (improve guess x)
                               x)))
          What happens when Alyssa attempts to use this to compute square roots? Explain.


          (define (new-if predicate then-clause else-clause)
          (cond (predicate then-clause)
                (else-clause)))
          (define (average x y)
            (/ (+ x y) 2))
          (define (improve guess x)
            (average guess (/ x guess)))
          (define (good-enough? guess x)
            (< (abs (- (square guess) x))0.001))
          (define (square x)
            (* x x))
          (define (sqrt-iter guess x)
            (new-if (good-enough? guess x)
                    guess
                    (sqrt-iter (improve guess x)
                               x)))

          sqrt-iter (improve guess x)作為參數來傳遞給new-if,在執行new-if的時候,就總是會執行sqrt-iter (improve guess x),造成了死循環。

          posted on 2009-03-06 15:19 lzj520 閱讀(308) 評論(0)  編輯  收藏 所屬分類: 個人學習日記sicp
          主站蜘蛛池模板: 隆化县| 通化县| 皋兰县| 尚志市| 静海县| 曲靖市| 油尖旺区| 民勤县| 龙井市| 麻栗坡县| 兴城市| 武胜县| 台北县| 德保县| 峨山| 呼图壁县| 邵阳县| 郎溪县| 盐城市| 孝义市| 尼勒克县| 礼泉县| 福贡县| 沾化县| 平乡县| 中西区| 治县。| 饶河县| 左云县| 隆安县| 盐山县| 钟祥市| 宜川县| 封丘县| 册亨县| 静海县| 张北县| 林口县| 新巴尔虎左旗| 拉萨市| 金川县|