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

問題3.31

(define the-agenda (make-agenda))
(define inverter-delay 2)
(define and-gate-delay 3)
(define or-gate-delay 5)

(define input-1 (make-wire))
(define input-2 (make-wire))
(define sum (make-wire))
(define carry (make-wire))

(probe 'sum sum)
(probe 'carry carry)
(half-adder input-1 input-2 sum carry)
(set-signal! input-1 1)
(propagate)
(set-signal! input-2 1)
(propagate)

;; 初期化ありの場合
gosh> the-agenda
gosh> inverter-delay
gosh> and-gate-delay
gosh> or-gate-delay
gosh> input-1
gosh> input-2
gosh> sum
gosh> carry
gosh> 
sum 0 New-value = 0#<undef>
gosh> 
carry 0 New-value = 0#<undef>
gosh> ok-half-adder
gosh> done-call-each
gosh> 
sum 8 New-value = 1done
gosh> done-call-each
gosh> 
carry 11 New-value = 1
sum 16 New-value = 0done
gosh> 

;; 初期化なしの場合
gosh> the-agenda
gosh> inverter-delay
gosh> and-gate-delay
gosh> or-gate-delay
gosh> input-1
gosh> input-2
gosh> sum
gosh> carry
gosh> (#<closure (probe #f)>)
gosh> (#<closure (probe #f)>)
gosh> ok-half-adder
gosh> done-call-each
gosh> done
gosh> done-call-each
gosh> 
carry 11 New-value = 1done
gosh> 

シミュレーションは after-delay 手続きによって agenda に、指定時間後に実行されるアクション手続きを追加してゆき、 propagate 手続きによって各アクション手続きを実行してゆくことで行われる。
after-delay 手続きは、各入力回線に accept-action-procedure! によって追加される手続き中で実行される。
accept-action-procedure! が実行されなかった場合は after-delay 手続きが実行されないために agenda にシミュレーションのためのアクション手続きが追加されない。

計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»