2016-07-13 01:17:07 +00:00
|
|
|
#lang syndicate/actor
|
|
|
|
|
|
|
|
(require racket/set)
|
2016-07-13 20:37:58 +00:00
|
|
|
|
2016-07-13 20:35:55 +00:00
|
|
|
(actor #:name 'queryer
|
2016-07-13 01:17:07 +00:00
|
|
|
(forever
|
2016-07-17 04:10:17 +00:00
|
|
|
(define/query-value as-value 'absent `(item ,$a ,$b) (list a b))
|
2016-07-13 21:20:57 +00:00
|
|
|
(define/query-set as-set `(item ,$a ,$b) (list a b)
|
|
|
|
#:on-add (log-info "as-set adding ~v/~v" a b)
|
|
|
|
#:on-remove (log-info "as-set removing ~v/~v" a b))
|
2016-07-13 20:37:58 +00:00
|
|
|
(define/query-hash as-hash `(item ,$a ,$b) a b)
|
|
|
|
(define/query-hash-set as-hash-set `(item ,$a ,$b) a b)
|
2016-07-13 01:17:07 +00:00
|
|
|
|
|
|
|
(on (message 'dump)
|
|
|
|
(printf "----------------------------------------\n")
|
2016-07-17 04:10:17 +00:00
|
|
|
(printf "Queried as-value: ~v\n" (as-value))
|
|
|
|
(newline)
|
2016-07-13 20:35:55 +00:00
|
|
|
(printf "Queried as-set:\n")
|
2016-07-13 01:17:07 +00:00
|
|
|
(for [(item (as-set))]
|
|
|
|
(match-define (list a b) item)
|
|
|
|
(printf " ~v -> ~v\n" a b))
|
|
|
|
(newline)
|
2016-07-13 20:35:55 +00:00
|
|
|
(printf "Queried as-hash:\n")
|
2016-07-13 01:17:07 +00:00
|
|
|
(for [((k v) (in-hash (as-hash)))]
|
|
|
|
(printf " ~v -> ~v\n" k v))
|
|
|
|
(newline)
|
2016-07-13 20:35:55 +00:00
|
|
|
(printf "Queried as-hash-set:\n")
|
2016-07-13 01:17:07 +00:00
|
|
|
(for [((k vs) (in-hash (as-hash-set)))]
|
|
|
|
(printf " ~v -> ~v\n" k vs))
|
|
|
|
(printf "----------------------------------------\n")
|
|
|
|
(flush-output))))
|
|
|
|
|
|
|
|
(actor #:name 'mutator
|
|
|
|
(assert! `(item a 1))
|
|
|
|
(assert! `(item b 2))
|
|
|
|
(assert! `(item b 3))
|
|
|
|
(send! 'dump)
|
|
|
|
(retract! `(item b ,?))
|
|
|
|
(send! 'dump)
|
|
|
|
(assert! `(item c 1))
|
|
|
|
(assert! `(item c 4))
|
|
|
|
(send! 'dump)
|
|
|
|
(forever))
|