From b946bbec3cfae5e037014b54047b51c816e22401 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 12 Dec 2016 11:09:39 +1300 Subject: [PATCH] Glitching example --- .../examples/actor/example-glitch.rkt | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 racket/syndicate/examples/actor/example-glitch.rkt diff --git a/racket/syndicate/examples/actor/example-glitch.rkt b/racket/syndicate/examples/actor/example-glitch.rkt new file mode 100644 index 0000000..cde5b5c --- /dev/null +++ b/racket/syndicate/examples/actor/example-glitch.rkt @@ -0,0 +1,61 @@ +#lang syndicate/actor +;; Demonstrate FRP-like "glitching" +;; +;; Based on an example from the FRP survey of Bainomugisha et al. +;; 2013: +;; +;; var1 = 1 +;; var2 = var1 * 1 +;; var3 = var1 + var2 +;; +;; Sample output; notice doubled 'var3 printing: +;; +;; 'var1 = 1 +;; 'var2 = 1 +;; 'var3 = 2 +;; --- +;; 'var1 = 2 +;; 'var2 = 2 +;; 'var3 = 3 +;; 'var3 = 4 +;; --- +;; 'var1 = 3 +;; 'var2 = 3 +;; 'var3 = 5 +;; 'var3 = 6 +;; --- +;; 'var1 = 4 +;; 'var2 = 4 +;; 'var3 = 7 +;; 'var3 = 8 +;; --- + +(require/activate syndicate/drivers/timestate) + +(actor (field [var1 1]) + (assert (list 'var1 (var1))) + (on (message 'tick) + (var1 (+ (var1) 1)))) + +(actor (during (list 'var1 $v) + (assert (list 'var2 (* v 1))))) + +(actor (during (list 'var1 $v1) + (during (list 'var2 $v2) + (assert (list 'var3 (+ v1 v2)))))) + +(actor (on (asserted (list $k $v)) + (printf "~v = ~v\n" k v))) + +(actor* (until (asserted (observe 'tick))) + (sleep 0.1) + (printf "---\n") + (send! 'tick) + (sleep 0.1) + (printf "---\n") + (send! 'tick) + (sleep 0.1) + (printf "---\n") + (send! 'tick) + (sleep 0.1) + (printf "---\n"))