関数型言語の勉強に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


※「SICPを読もう」の目次はこちら


計算機プログラムの構造と解釈
Gerald Jay Sussman Julie Sussman Harold Abelson 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404