問題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からだけでは計算できない。