関数型言語の勉強にSICPを読もう - (42) 3章 - 標準部品化力、オブジェクトおよび状態 (163-166ページ)
ぼやき
SICPを見ながら、コードを打ち込んだのですが一箇所「 ( 」の対応をミスっていて3日間くらい全然進みませんでした。
でもそのおかげで、コードを舐めるように眺めたので構造が理解できました。
本をさらっと読んで動かしただけではここまでの理解は得られなかったので時間は無駄になっていない!と信じたい。
問題3.28, 29の答え合わせ
実際にシミュレータが動くようになったのでテストしてみました。
(define the-agenda (make-agenda)) (define inverter-delay 2) (define and-gate-delay 3) (define or-gate-delay 5) (define input1 (make-wire)) (define input2 (make-wire)) (define output (make-wire)) (or-gate input1 input2 output) (probe 'input1 input1) (probe 'input2 input2) (probe 'output output) (set-signal! input1 1) (propagate) (set-signal! input1 0) (propagate) (set-signal! input2 1) (propagate) (set-signal! input1 1) (propagate)
実際に実行してみると input1, input2の変化に合わせて output が変化しているのが実際に確認できます。
input1 0 New-value = 0 input2 0 New-value = 0 output 0 New-value = 0 input1 0 New-value = 1 output 5 New-value = 1 input1 5 New-value = 0 output 10 New-value = 0 input2 10 New-value = 1 output 15 New-value = 1 input1 15 New-value = 1
問題3.31
accept-action-procedure!で直ちに action が実行されないということは after-delayが呼ばれないことを意味する。
ということは agenda に追加されないのでシミュレータが動作しない。
ソース
関連ソースをまとめました。
sicp-digital-simulator.zip
計算機プログラムの構造と解釈
posted with amazlet on 06.04.15
Gerald Jay Sussman Julie Sussman Harold Abelson 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404