example-partial-retraction.rkt
This commit is contained in:
parent
c7b62b109e
commit
d9b11566f5
|
@ -0,0 +1,39 @@
|
|||
#lang syndicate
|
||||
;; Illustrates the response of asserted / retracted / during to
|
||||
;; observation of assertions discarding some of their dimensions.
|
||||
|
||||
(require syndicate/actor)
|
||||
|
||||
(struct ready (what) #:prefab)
|
||||
(struct entry (key val) #:prefab)
|
||||
|
||||
(actor (forever
|
||||
(assert (ready 'listener))
|
||||
(on (asserted (entry $key _))
|
||||
(log-info "key ~v asserted" key)
|
||||
(until (retracted (entry key _))
|
||||
(on (asserted (entry key $value))
|
||||
(log-info "add binding: ~v -> ~v" key value))
|
||||
(on (retracted (entry key $value))
|
||||
(log-info "del binding: ~v -> ~v" key value)))
|
||||
(log-info "key ~v retracted" key))))
|
||||
|
||||
(define (pause)
|
||||
(log-info "pause")
|
||||
(until (asserted (ready 'pause))
|
||||
(assert (ready 'pause))))
|
||||
|
||||
(actor (until (asserted (ready 'listener)))
|
||||
(assert! (entry 'a 1))
|
||||
(assert! (entry 'a 2))
|
||||
(assert! (entry 'b 3))
|
||||
(assert! (entry 'c 33))
|
||||
(assert! (entry 'a 4))
|
||||
(assert! (entry 'a 5))
|
||||
(pause)
|
||||
(retract! (entry 'a 2))
|
||||
(retract! (entry 'c 33))
|
||||
(assert! (entry 'a 9))
|
||||
(pause)
|
||||
(retract! (entry 'a ?))
|
||||
(pause))
|
Loading…
Reference in New Issue