]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex3_28.rkt
Solutions to 4.27, 4.28 and 4.29.
[sicp.git] / src / sicp / ex3_28.rkt
1 #lang racket
2
3 (define (or-gate o1 o2 output)
4   (define (or-action-procedure)
5     (let ((new-value
6            (logical-or (get-signal o1)
7                        (get-signal o2))))
8       (after-delay or-gate-delay
9                    (lambda ()
10                      (set-signal! output new-value)))))
11   
12   (define (logicval-or o1 o2)
13     (cond
14       ((and (= o1 0) (= o1 0)) 0)
15       ((or  (= o1 1) (= o2 1)) 1)
16       (else (error "invalid signals"))))
17   
18   (add-action! o1 or-action-procedure)
19   (add-action! o2 or-action-procedure)
20   'ok)
21