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

18 lines
493 B
Racket
Raw Normal View History

2016-07-10 16:33:16 +00:00
#lang syndicate/actor
2016-01-16 19:32:04 +00:00
;; Hello-worldish "bank account" example.
(struct account (balance) #:prefab)
2016-01-18 22:38:58 +00:00
(struct deposit (amount) #:prefab)
2016-01-16 19:32:04 +00:00
(actor (field [balance 0])
(assert (account (balance)))
(on (message (deposit $amount))
(balance (+ (balance) amount))))
2016-01-16 19:32:04 +00:00
(actor (on (asserted (account $balance))
(printf "Balance changed to ~a\n" balance)))
2016-01-16 19:32:04 +00:00
(actor* (until (asserted (observe (deposit _))))
(send! (deposit +100))
(send! (deposit -30)))