syndicate-2017/prospect/examples/actor/bank-account.rkt

23 lines
649 B
Racket
Raw Normal View History

2016-01-16 19:32:04 +00:00
#lang prospect
;; Hello-worldish "bank account" example.
(require prospect/actor)
(struct account (balance) #:prefab)
(struct alter-balance-by (amount) #:prefab)
(actor-body->spawn-action
(lambda ()
(actor (forever #:collect [(balance 0)]
(assert (account balance))
(on (message (alter-balance-by $amount))
(+ balance amount))))
(actor (forever (on (asserted (account $balance))
(printf "Balance changed to ~a\n" balance))))
(until (asserted (observe (alter-balance-by _))))
(send! (alter-balance-by +100))
(send! (alter-balance-by -30))
))