(load "constraints.txt") (define (squarer a b) (define (process-new-value) (if (has-value? b) (if (< (get-value b) 0) (error "square less than 0 -- SQUARER" (get-value b)) (set-value! a (sqrt (get-value b)) me)) (set-value! b (square (get-value a)) me))) (define (process-forget-value) (forget-value! a me) (forget-value! b me)) (define (me request) (cond ((eq? request 'I-have-a-value) (process-new-value)) ((eq? request 'I-lost-my-value) (process-forget-value)) (else (error "Unknown request -- SQUARER" request)))) (connect a me) (connect b me) me) ; 1 ]=> (define a (make-connector)) ; ; ;Value: a ; ; 1 ]=> (define b (make-connector)) ; ; ;Value: b ; ; 1 ]=> (probe 'a a) ; ; ;Value: #[compound-procedure 12 me] ; ; 1 ]=> (probe 'b b) ; ; ;Value: #[compound-procedure 13 me] ; ; 1 ]=> (squarer a b) ; ; ;Value: #[compound-procedure 14 me] ; ; 1 ]=> (set-value! a 2 'user) ; ; Probe: b = 4 ; Probe: a = 2 ; ;Value: done ; ; 1 ]=> (forget-value! a 'user) ; ; Probe: b = ? ; Probe: a = ? ; ;Value: done ; ; 1 ]=> (set-value! b 2 'user) ; ; Probe: a = 1.4142135623730951 ; Probe: b = 2 ; ;Value: done