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 閱讀(309) 評論(0)  編輯  收藏 所屬分類: 個人學習日記sicp
          主站蜘蛛池模板: 平昌县| 松阳县| 沅江市| 淮北市| 四会市| 乐安县| 图片| 镇江市| 秭归县| 晋州市| 金阳县| 南郑县| 高阳县| 镇江市| 赤峰市| 肥西县| 海城市| 临猗县| 鄂伦春自治旗| 来宾市| 京山县| 吕梁市| 外汇| 蓝田县| 镇平县| 太和县| 白朗县| 福鼎市| 迭部县| 长丰县| 高台县| 敖汉旗| 深圳市| 吉木乃县| 上犹县| 安仁县| 贵州省| 连南| 信丰县| 田阳县| 吴川市|