問題3.77 – SICP(計算機プログラムの構造と解釈)その167

問題3.77

被積分値を先に評価する force の部分はすぐにわかったのだけれど、 integral の再帰部分の第1引数を delay しなければいけないところがわからなかった。
solve 手続きは、本文に記載されているものは Gauche では動作しないので修正が必要となった。
参考 : SICP Exercise 3.77. – 理工系学生の演習日記

(define (integral delayed-integrand initial-value dt)
  (cons-stream initial-value
               (let ((integrand (force delayed-integrand)))
                    (if (stream-null? integrand)
                        the-empty-stream
                        (integral (delay (stream-cdr integrand))
                                  (+ (* dt (stream-car integrand))
                                     initial-value)
                                  dt)))))

;; gauche で動作するように修正した solve 手続き
(define (solve f y0 dt)
  (define dy (stream-map f y))
  (define y (integral (delay dy) y0 dt))
  y)

(stream-ref (solve (lambda (y) y) 1 0.001) 1000)
gosh> 2.716923932235896
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»