example-partial-retraction.rkt

This commit is contained in:
Tony Garnock-Jones 2016-05-17 00:09:18 -04:00
parent c7b62b109e
commit d9b11566f5
1 changed files with 39 additions and 0 deletions

View File

@ -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))