問題3.32 – SICP(計算機プログラムの構造と解釈)その130
2009年03月18日
問題3.32
agenda
のデータ構造
(define the-agenda (make-agenda)) (define and-gate-delay 3) (define a (make-wire)) (define b (make-wire)) (define c (make-wire)) (probe 'c c) (and-gate a b c) (set-signal! b 1) (propagate) ;=> 次第書きに登録されたアクションを一度クリアするためにシミュレーションを実行する。 gosh> done-agenda ; the-agenda => (3) (set-signal! a 1) ;; add-action! で回線 a にアクション手続きが追加されて、次第書き the-agenda に登録される gosh> done-call-each ; the-agenda => (3 (6 #0=(#<closure (and-gate and-action-procedure #f)>) . #0#)) (set-signal! b 0) ;; add-action! で回線 b にアクション手続きが追加されて、次第書き the-agenda に登録される gosh> done-call-each ; the-agenda => (3 (6 (#<closure (and-gate and-action-procedure #f)> . #0=(#<closure (and-gate and-action-procedure #f)>)) . #0#)) ;; この時点で、次第書き the-agenda には2つのアクション手続きが登録されている。 ;; 次第書きのアクションは、"回線aに登録されたアクション"、"回線bに登録されたアクション" の順で実行される。 (propagate) gosh> c 6 New-value = 1 c 6 New-value = 0done-agenda
次第書きのアクションが最後に入ったものが最初に出る(LIFO)の場合は、”回線b
に登録されたアクション”、”回線a
に登録されたアクション” の順で実行される。
この場合は出力回線 c
に変化は起こらず 0
のままとなりシミュレーションが正常に実行されない。
; the-agenda => (3) (set-signal! b 0) gosh> done-call-each ; the-agenda => (3 (6 #0=(#<closure (and-gate and-action-procedure #f)>) . #0#)) (set-signal! a 1) gosh> done-call-each ; the-agenda => (3 (6 (#<closure (and-gate and-action-procedure #f)> . #0=(#<closure (and-gate and-action-procedure #f)>)) . #0#)) (propagate) gosh> done-agenda
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542