2014年7月31日木曜日

開発環境

計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の3(標準部品化力、オブジェクトおよび状態)、3.5(ストリーム)、3.5.1(ストリームは遅延リスト)、ストリームの実装の働き、delayとforceの実装、問題 3.52.を解いてみる。

その他参考書籍

問題 3.52.

メモ化による最適化を行った場合。


(define sum 0)
sum: 0

(define (accum x)
  (set! sum (+ x sum))
  sum)
sum: 0

(define seq (stream-map accum (stream-enumerate-interval 1 20)))
seq: (1 thunk:(2..))
sum: 1

(define y (stream-filter even? seq))
y: (3 thunk:(3..))
sum: 3
y: (6 thunk:(4..))
sum: 6

(define z (stream-filter (lambda (x) (= (remainder x 5) 0))
                         seq))
z: (10 tunk:(5 ..))
sum: 10

(stream-ref y 7)
y: (6 10 15 21 28 36 45 55 66 78 91 105 120 136 thunk:(17..))
y: (6 10 28 36 66 78 120 136 thunk:(17..))
sum: 136

(display-stream z)
z: (10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 210)
10
15
45
55
105
120
190
210)
sum: 210

メモ化による最適化を行わなかった場合。

(define sum 0)
sum: 0

(define (accum x)
  (set! sum (+ x sum))
  sum)
sum: 0

(define seq (stream-map accum (stream-enumerate-interval 1 20)))
seq: (1 thunk:(2..))
sum: 1

(define y (stream-filter even? seq))
y: (3 thunk:(3..))
sum: 3
y: (6 thunk:(4..))
sum: 6

(define z (stream-filter (lambda (x) (= (remainder x 5) 0))
                         seq))
seq: (8 thunk: (3..))
sum: 8
seq: (11 thunk:(4..))
sum: 11
seq: (15 thunk:(5..))
sum: 15

(stream-ref y 7)
y: (6 19 24 30 37 45 54 64 75 87 100 114 129 145 162 thunk:(18..))
y: (6 24 30 54 64 100 114 162 thunk:(18..))
sum: 162

(display-stream z)
z: (15 167 173 180 188 197 207 218 230 243 257 272 288 305 323 342 362)
z: (15 180 230 305)
15
180
230
305
sum: 362

0 コメント:

コメントを投稿