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の値は決まらない。