3.33 Exercise 3.33
An averager is fairly easy to define:
(define (averager a b c) (let ((d (make-connector)) (e (make-connector))) (adder a b e) (multiplier c d e) (constant 2 d) 'ok))
Used in a REPL session, it looks like this:
> (define A (make-connector)) > (define B (make-connector)) > (define C (make-connector)) > (averager A B C) 'ok
> (probe "A" A) #<procedure>
> (probe "B" B) #<procedure>
> (probe "C" C) #<procedure>
> (set-value! A 3 'user)
Probe: A = 3
'done
> (set-value! B 10 'user)
Probe: B = 10
Probe: C = 13/2
'done
> (forget-value! A 'user)
Probe: A = ?
Probe: C = ?
'done
> (set-value! C 8 'user)
Probe: C = 8
Probe: A = 6
'done