計算機プログラムの構造と解釈[第2版]
(翔泳社)
ハロルド エイブルソン (著) ジュリー サスマン (著)
ジェラルド・ジェイ サスマン (著)
Harold Abelson (原著) Julie Sussman (原著)
Gerald Jay Sussman (原著) 和田 英一 (翻訳)
開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Scheme (プログラミング言語)
- Gauche (処理系)
計算機プログラムの構造と解釈[第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.を解いてみる。
その他参考書籍
- Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
- プログラミングGauche (Kahuaプロジェクト (著), 川合 史朗 (監修), オライリージャパン)
問題 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 コメント:
コメントを投稿