問題3.33 – SICP(計算機プログラムの構造と解釈)その131

問題3.33

制約ネットワークで表した、a + b = 2 * c の図。

SICP 問題3.33

(define (averager a b c)
  (let ((u (make-connector))
        (x (make-connector)))
       (adder a b u)
       (multiplier c x u)
       (constant 2 x)
       'ok))

(define A (make-connector))
(define B (make-connector))
(define C (make-connector))
(averager A B C)
(probe "A" A)
(probe "B" B)
(probe "C" C)

実行結果

(set-value! A 10 'user)
gosh> 
Probe: A = 10done
(set-value! B 20 'user)
gosh> 
Probe: B = 20
Probe: C = 15done
(set-value! C 50 'user)
gosh> *** ERROR: Contradiction (15 50)
Stack Trace:
_______________________________________
(forget-value! A 'user) ;; B は forget しないので 20 のまま
gosh> 
Probe: A = ?
Probe: C = ?done
(set-value! C 50 'user)
gosh> 
Probe: C = 50
Probe: A = 80done
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»