37 lines
1.1 KiB
Racket
37 lines
1.1 KiB
Racket
|
#lang syndicate/actor
|
||
|
|
||
|
(require syndicate/threaded)
|
||
|
(require/activate syndicate/drivers/timer)
|
||
|
|
||
|
(actor
|
||
|
(react
|
||
|
(during/actor (observe `(fib ,$n ,_))
|
||
|
#:actor actor/thread
|
||
|
(assert `(fib ,n
|
||
|
,(begin
|
||
|
(log-info "Computing fib ~a..." n)
|
||
|
(let f ((n n))
|
||
|
(if (< n 2)
|
||
|
n
|
||
|
(+ (f (- n 1))
|
||
|
(f (- n 2)))))))))))
|
||
|
|
||
|
(dataspace/thread
|
||
|
(actor
|
||
|
(field [tick-count 0])
|
||
|
(define (arm!)
|
||
|
(log-info "Tick ~v!" (tick-count))
|
||
|
(send! (set-timer 'tick 1000 'relative) #:meta-level 1))
|
||
|
(react (on (message (timer-expired 'tick _) #:meta-level 1)
|
||
|
(tick-count (+ (tick-count) 1))
|
||
|
(arm!))
|
||
|
(on-start (arm!))))
|
||
|
|
||
|
(react/suspend (done)
|
||
|
(on (asserted `(fib 36 ,$v) #:meta-level 1)
|
||
|
(log-info "fib 36 is ~a" v))
|
||
|
(on (asserted `(fib 38 ,$v) #:meta-level 1)
|
||
|
(log-info "fib 38 is ~a" v)
|
||
|
(done))
|
||
|
(on-stop (log-info "Quitting main"))))
|