2016-07-10 16:33:16 +00:00
|
|
|
#lang syndicate/actor
|
2016-05-17 04:09:18 +00:00
|
|
|
;; Illustrates the response of asserted / retracted / during to
|
|
|
|
;; observation of assertions discarding some of their dimensions.
|
|
|
|
|
|
|
|
(struct ready (what) #:prefab)
|
|
|
|
(struct entry (key val) #:prefab)
|
|
|
|
|
2017-02-15 23:18:19 +00:00
|
|
|
(spawn (assert (ready 'listener))
|
2016-08-24 16:35:38 +00:00
|
|
|
(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)))
|
2016-05-17 04:09:18 +00:00
|
|
|
|
2017-02-15 23:18:19 +00:00
|
|
|
(spawn (assert (ready 'other-listener))
|
2016-08-24 16:35:38 +00:00
|
|
|
(during (entry $key _)
|
|
|
|
(log-info "(other-listener) key ~v asserted" key)
|
|
|
|
(on-stop (log-info "(other-listener) key ~v retracted" key))
|
|
|
|
(during (entry key $value)
|
|
|
|
(log-info "(other-listener) ~v ---> ~v" key value)
|
|
|
|
(on-stop (log-info "(other-listener) ~v -/-> ~v" key value)))))
|
2016-05-17 04:15:52 +00:00
|
|
|
|
2016-05-17 04:09:18 +00:00
|
|
|
(define (pause)
|
|
|
|
(log-info "pause")
|
2016-07-09 20:18:30 +00:00
|
|
|
(define token (gensym 'pause)) ;; FIXME:: If we use the same token every time, need epochs!
|
|
|
|
(until (asserted (ready token))
|
|
|
|
(assert (ready token))))
|
2016-05-17 04:09:18 +00:00
|
|
|
|
2017-02-15 23:18:19 +00:00
|
|
|
(spawn* (until (asserted (ready 'listener)))
|
2016-08-24 16:35:38 +00:00
|
|
|
(until (asserted (ready 'other-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))
|