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
          主站蜘蛛池模板: 贵南县| 浦江县| 屏东县| 竹溪县| 吴忠市| 云阳县| 延吉市| 化州市| 大同县| 休宁县| 宜君县| 石楼县| 南丰县| 丹阳市| 望城县| 阳朔县| 永平县| 县级市| 温泉县| 河西区| 波密县| 富宁县| 鄄城县| 农安县| 大化| 府谷县| 信丰县| 青田县| 班玛县| 清丰县| 花莲县| 靖宇县| 淳化县| 左权县| 比如县| 古交市| 静安区| 富裕县| 化州市| 南宁市| 康乐县|