問題3.31 – SICP(計算機プログラムの構造と解釈)その129
2009年03月17日
問題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
にシミュレーションのためのアクション手続きが追加されない。
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542