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

問題3.37

除算については、 x / y = zx = y * z として multiplier で演算する。

(define (c+ x y)
  (let ((z (make-connector)))
       (adder x y z)
       z))

(define (c* x y)
  (let ((z (make-connector)))
       (multiplier x y z)
       z))

(define (c/ x y)
  (let ((z (make-connector)))
       (multiplier y z x)
       z))

(define (cv x)
  (let ((z (make-connector)))
       (constant x z)
       z))

実行結果

(define (celsius-fahrenheit-converter x)
  (c+ (c* (c/ (cv 9) (cv 5))
          x)
      (cv 32)))

(define C (make-connector))
(define F (celsius-fahrenheit-converter C))

(probe "Celsius temp" C)
(probe "Fahrenheit temp" F)

(set-value! C 25 'user)
gosh> 
Probe: Celsius temp = 25
Probe: Fahrenheit temp = 77done

(set-value! F 212 'user)
gosh> *** ERROR: Contradiction (77 212)
Stack Trace:
_______________________________________

(forget-value! C 'user)
gosh> 
Probe: Celsius temp = ?
Probe: Fahrenheit temp = ?done

(set-value! F 212 'user)
gosh> 
Probe: Fahrenheit temp = 212
Probe: Celsius temp = 100done
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»