SICPでデジタル回路
ディジタル回路(SICP 3.3.4 A simulator for Digital Circuits)動いたよ!とgoogle向けにキーワードを書いてみた。
わかってしまうとたいした理由じゃない。
(define (set-current-time! agenda time) (set-car! agenda time))
のset-car!がset-cdr!になっていた。the-agendaのcar部が時刻を表し、今実行した時刻で上書きするところが、イベントーキューをまるごと破壊していた。

デバッグ用にlist構造を書いた図をupしておきます。この図は遅延が2のinverterを一つ用意したときの図です。
(inverter input output)
宣言した時点で、inputの初期値0に対して、2nsに反転させる手続きinverter-inputが実行されます。
デバッグに手こずったのがこの関数
(define (first-agenda-item agenda)
(if (empty-agenda? agenda)
(error "Agenda is empty -- FIRST-AGENDA-ITEM")
(let ((first-seg (first-segment agenda)))
(set-current-time! agenda (segment-time first-seg))
(front-queue (segment-queue first-seg)))))
見た目はfirst-agenda-itemと普通の関数なのに、中でset-current-time!を呼び出して破壊的操作をしている。なんてこったい。これに気がつかず遠回りをしてしまった。
The comments to this entry are closed.


Comments