問題3.35 – SICP(計算機プログラムの構造と解釈)その133
2009年03月22日
問題3.35
(define (squarer a b) (define (process-new-value) (if (has-value? b) (if (< (get-value b) 0) (error "square less than 0 -- SQUARER" (get-value b)) (set-value! a (sqrt (get-value b)) me)) (set-value! b (square (get-value a)) me))) (define (process-forget-value) (forget-value! a me) (forget-value! b me)) (define (me request) (cond ((eq? request 'I-have-a-value) (process-new-value)) ((eq? request 'I-lost-my-value) (process-forget-value)) (else (error "Unknown request -- SQUARER" request)))) (connect a me) (connect b me) me)
実行結果
(define A (make-connector)) (define B (make-connector)) (squarer A B) (probe "A" A) (probe "B" B) (set-value! A 3 'user) gosh> Probe: A = 3 Probe: B = 9done (forget-value! A 'user) gosh> Probe: A = ? Probe: B = ?done (set-value! B 16 'user) gosh> Probe: B = 16 Probe: A = 4.0done
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542