問題3.34

(define (squarer a b) (multiplier a a b))
(define a (make-connector))
(define b (make-connector))

(squarer a b)
(probe "A" a)
(probe "B" b)

(set-value! a -3 'user)
;Probe: B = 9

(forget-value! a 'user)
(set-value! b 9 'user)
;Probe: B = 9
;; --> aが表示されない。

;; 計算の双方向性、無方向性が崩れる。aが決定したときにbは算出できるが、bが決定してもaが算出できない。
;; なぜなら、multiplierは m1 m2 productをとり二つの値が存在するとき、もう一つの値が計算できる。
;; このことにより、計算の双方向性を担保しているため、m1 m2に同じものを指定してしまうと、 squarerのbが決定した場合に、aが決定できないからである。
;; multiplierは 少なくとも二つの決定した値が必要である、m1, m2が不定となるとproductからだけでは計算できない。