-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path3.35.rkt
More file actions
38 lines (33 loc) · 924 Bytes
/
3.35.rkt
File metadata and controls
38 lines (33 loc) · 924 Bytes
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
36
37
38
#lang scheme
(require r5rs
"./connector.rkt"
"./probe.rkt")
(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))
(if (has-value? a)
(set-value! b (sqrt (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: PROBE" request))))
(connect a me)
(connect b me)
me)
; test
(define A (make-connector))
(define B (make-connector))
(squarer A B)
(probe "A" A)
(probe "B" B)
; a -> b, ok
(set-value! A 5 'user)
; b -> a, ok
(forget-value! A 'user)
(set-value! B 16 'user)