Glitching example

This commit is contained in:
Tony Garnock-Jones 2016-12-12 11:09:39 +13:00
parent 4940c0b372
commit b946bbec3c
1 changed files with 61 additions and 0 deletions

View File

@ -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"))