2013年7月23日火曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の3(標準部品化力, オブジェクトおよび状態)、3.3(可変データでのモデル化)、3.3.5(制約の拡散)、制約システムの使い方、制約システムの実装、コネクタの表現の問題 3.33を解いてみる。

その他参考書籍

問題3.33

コード(BBEdit)

sample.scm

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

(define a (make-connector))
(define b (make-connector))
(define c (make-connector))

入出力結果(Terminal, REPL(Read, Eval, Print, Loop))

1 ]=> (averager a b c)

;Value: ok

1 ]=> (probe "a" a)

;Value 2: #[compound-procedure 2 me]

1 ]=> (probe "b" b)

;Value 3: #[compound-procedure 3 me]

1 ]=> (probe "c(aとbの値の平均)" c)

;Value 4: #[compound-procedure 4 me]

1 ]=> (set-value! a 1 'user)

Probe: a = 1
;Value: done

1 ]=> (set-value! b 2 'user)

Probe: b = 2
Probe: c(aとbの値の平均) = 1.5
;Value: done

1 ]=> (forget-value! a 'user)

Probe: a = ?
Probe: c(aとbの値の平均) = ?
;Value: done

1 ]=> (set-value! a 1 'user)

Probe: a = 1
Probe: c(aとbの値の平均) = 1.5
;Value: done

1 ]=> (forget-value! a 'user1)

;Value: ignore

1 ]=> (forget-value! a 'user)

Probe: a = ?
Probe: c(aとbの値の平均) = ?
;Value: done

1 ]=> (set-value! a 1 'user1)

Probe: a = 1
Probe: c(aとbの値の平均) = 1.5
;Value: done

1 ]=> (forget-value! a 'user)

;Value: ignore

1 ]=> (forget-value! a 'user1)

Probe: a = ?
Probe: c(aとbの値の平均) = ?
;Value: done

1 ]=> (set-value! c 10 'user2)

Probe: c(aとbの値の平均) = 10
Probe: a = 18.
;Value: done

1 ]=> (forget-value! b 'user)

Probe: b = ?
Probe: a = ?
;Value: done

1 ]=> (set-value! a 100 'me)

Probe: a = 100
Probe: b = -80.
;Value: done

0 コメント:

コメントを投稿