From d9b11566f5ea118d8b76df99bb6764aecd8272f4 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 17 May 2016 00:09:18 -0400 Subject: [PATCH] example-partial-retraction.rkt --- .../actor/example-partial-retraction.rkt | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 racket/syndicate/examples/actor/example-partial-retraction.rkt diff --git a/racket/syndicate/examples/actor/example-partial-retraction.rkt b/racket/syndicate/examples/actor/example-partial-retraction.rkt new file mode 100644 index 0000000..68ad166 --- /dev/null +++ b/racket/syndicate/examples/actor/example-partial-retraction.rkt @@ -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))