SICP問題3.34
Louis Reasoner が定義した制約装置である平方器の重要な欠点
(define (squarer a b) (multiplier a a b))
とりあえず実験
(define a1 (make-connector)) ; a1 (define a2 (make-connector)) ; a2 (probe "a1" a1) ; #<closure (probe me)> (probe "a2" a2) ; #<closure (probe me)> (squarer a1 a2) ; #<closure (multiplier me)> (set-value! a1 2 'user) ; Probe: a2 = 4 ; Probe: a1 = 2done (forget-value! a1 'user) ; Probe: a2 = ? ; Probe: a1 = ?done (set-value! a1 3 'user) ; Probe: a2 = 9 ; Probe: a1 = 3done (forget-value! a1 'user) ; Probe: a2 = ? ; Probe: a1 = ?done (set-value! a2 4 'user) ; Probe: a2 = 4done
multiplier は三つの引数のうち二つの引数が決まると、もう一つの引数の値が決まる。
よって、(multiplier a a b)の場合、上で示したようにaの値を決めるとbの値が決まるが、bの値を決めてもaの値は決まらない。