SICP 読み (115) 3.3.4 ディジタル回路のシミュレータ

3.3.4 節をだらだら読んでて、解らしきものを思いついたので控えを。
入力を in1、in2 として出力が o

(define (or-gate-2 in1 in2 o)
  (let ((a (make-wire)) (b (make-wire)) (c (make-wire)))
    (inverter in1 a)
    (inverter in2 b)
    (and-gate a b c)
    (inverter c o)
    'ok))

ってカンジで OK かなぁ。入力側をどっちも反転させといて and した後に再度反転。なんつーかある意味一般常識なソレが無くってスミマセン。でもちょっと嬉しかった。

あるいは 3.28 は以下ッスか?? (てきとー

(define (or-gate a1 a2 output)
  (define (or-action-proc)
    (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-proc)
  (add-action! a2 or-action-proc)
  'ok)

現時点で試験ができない状態なんでヤリたい放題かも。(を