Chapter 3, Modularity, Objects, and State
Exercise 3.37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
(define (c+ x y)
(let ((z (make-connector)))
(adder x y z)
z))
(define (c- x y)
(let ((z (make-connector)))
(adder y z x)
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-new x)
(c+ (c* (c/ (cv 9) (cv 5))
x)
(cv 32)))
(define CC (make-connector))
(define FF (celsius-fahrenheit-converter-new CC))
(probe "Celsius temp" CC)
(probe "Fahrenheit temp" FF)
Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1 ]=> (set-value! CC 25 'user)
Probe: Celsius temp = 25
Probe: Fahrenheit temp = 77
;Value: done
1 ]=> (set-value! FF 212 'user)
;Contradiction (77 212)
;To continue, call RESTART with an option number:
; (RESTART 1) => Return to read-eval-print level 1.
2 error> (forget-value! CC 'user)
Probe: Celsius temp = ?
Probe: Fahrenheit temp = ?
;Value: done
2 error> (restart 1)
;Abort!
1 ]=> (set-value! FF 212 'user)
Probe: Fahrenheit temp = 212
Probe: Celsius temp = 100
;Value: done