理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

問題3-28 (3.3.4 A Simulator for Digital Circuits)

電気回路のシミュレーションをする前段階として,基本ゲートを実装していきます.
and-gate は以下のような感じで提供されていますから,

;; and-gate
(define (and-gate a1 a2 output)
  (define (and-action-procedure)
    (let ((new-value
	   (logical-and (get-signal a1) (get-signal a2))))
      (after-delay and-gate-delay
		   (lambda ()
		     (set-signal! output new-value)))))
  (add-action! a1 and-action-procedure)
  (add-action! a2 and-action-procedure)
  'ok)

or-gate はそのパクリでだいじょうぶそうですね!

;; or-gate
(define (or-gate a1 a2 output)
  (define (or-action-procedure)
    (let ((new-value
	   (logical-or (get-signal a1) (get-signal a2))))
      (after-delay or-gate-delay
		   (lambda ()
		     (set-signal! output new-value)))))
  (add-action a1 or-action-procedure)
  (add-action a2 or-action-procedure)
  'ok)