莊周夢(mèng)蝶

          生活、程序、未來(lái)
             :: 首頁(yè) ::  ::  :: 聚合  :: 管理
              這節(jié)開(kāi)始介紹將用高階函數(shù)做抽象的技術(shù),比如將過(guò)程作為參數(shù)、返回值等等。習(xí)題1.30要求將書中的sum遞歸過(guò)程改造為迭代版本,解答如下:
          (define (sum-iter a term b next result)
            (
          if (> a b) 
                result
                (sum
          -iter (next a) term b next (+ result (term a)))))
          (define (sum term a 
          next b)
            (sum
          -iter a term b next 0))

          測(cè)試一下,比如求pi的過(guò)程:
          (define (sum-integers a b)
              (sum identity a inc b))

          (sum 1 10):
          =》 55

              再提下1.29的題目,使用辛普森規(guī)則計(jì)算定積分,一開(kāi)始我沒(méi)有使用sum過(guò)程,自己寫了遞歸:
          (define (simpson f a b n)
           (define h (
          / (- b a) n))
           (define (simpson
          -term k)
               (cond ((or (
          = k n) (= k 0)) (f (+ a (* k h))))
                     ((even
          ? k) (* 2 (f (+ a (* k h)))))
                     (
          else (* 4 (f (+ a (* k h)))))))
            (define (simpson
          -temp f a b counter n)
              (
          if (> counter n)
                  
          0
                  (
          + (* (/ h 3.0) (simpson-term counter)) (simpson-iter f a b (+ counter 1) n))))
            (simpson
          -temp f a b 0 n)
           )

              復(fù)用sum過(guò)程,也可以這樣寫:
          (define (inc i) (+ i 1))
          (define (simpson f a b n)   
            (define (simpson
          * h)
              (define (mag k)
                (cond ((or (
          = k 0) (= k n)) 1)
                      ((odd
          ? k) 4)
                      (
          else 2)))
              (define (y k) 
                (f (
          + a (* k h))))
              (define (term k)
                (
          * (mag k) (y k)))
              (
          / (* h (sum term
                           
          0
                           inc
                           n)) 
          3))
            (simpson
          * (/ (- b a) n)))




          主站蜘蛛池模板: 体育| 武定县| 思南县| 永吉县| 曲麻莱县| 三明市| 绿春县| 抚远县| 兴业县| 宝应县| 名山县| 建始县| 中宁县| 保山市| 类乌齐县| 溧阳市| 常州市| 铜鼓县| 海城市| 买车| 贡嘎县| 方城县| 将乐县| 清徐县| 延庆县| 涟源市| 资兴市| 肇州县| 富川| 黄山市| 镇宁| 儋州市| 阳高县| 七台河市| 惠州市| 沐川县| 罗江县| 桃园县| 寻乌县| 莲花县| 沂水县|