From 6e552e724d3ec19343e6711716c287e4d8352355 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 5 Mar 2015 19:56:11 +0000 Subject: [PATCH] #lang prospect version of example --- prospect/examples/example-lang.rkt | 70 ++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 prospect/examples/example-lang.rkt diff --git a/prospect/examples/example-lang.rkt b/prospect/examples/example-lang.rkt new file mode 100644 index 0000000..b542d30 --- /dev/null +++ b/prospect/examples/example-lang.rkt @@ -0,0 +1,70 @@ +#lang prospect + +(require (only-in racket/port read-line-evt)) +(require "../drivers/timer.rkt") + +(define (quasi-spy e s) + (printf "----------------------------------------\n") + (printf "QUASI-SPY:\n") + (match e + [(? patch? p) (pretty-print-patch p)] + [other + (write other) + (newline)]) + (printf "========================================\n") + #f) +(spawn quasi-spy (void) (sub ?)) + +(define (r e s) + (match e + [(message body) (transition s (message (at-meta `(print (got ,body)))))] + [_ #f])) + +(define (b e n) + (match e + [#f (if (< n 10) + (transition (+ n 1) (message `(hello ,n))) + #f)] + [_ #f])) + +(spawn-world (spawn r (void) (sub ?)) + (spawn b 0)) + +(define (echoer e s) + (match e + [(message (at-meta (external-event _ (list (? eof-object?))))) + (transition s (quit))] + [(message (at-meta (external-event _ (list line)))) + (transition s (message `(print (got-line ,line))))] + [_ #f])) + +(spawn echoer (void) + (sub (external-event (read-line-evt (current-input-port) 'any) ?) #:meta-level 1)) + +(define (ticker e s) + (match e + [(? patch? p) + (printf "TICKER PATCH RECEIVED:\n") + (pretty-print-patch p) + #f] + [(message (timer-expired 'tick now)) + (printf "TICK ~v\n" now) + (transition (+ s 1) (if (< s 3) + (message (set-timer 'tick 1000 'relative)) + (quit)))] + [_ #f])) + +(spawn-timer-driver) +(message (set-timer 'tick 1000 'relative)) +(spawn ticker 1 + (sub (observe (set-timer ? ? ?))) + (sub (timer-expired 'tick ?))) + +(define (printer e s) + (match e + [(message (list 'print v)) + (log-info "PRINTER: ~a" v) + #f] + [_ #f])) + +(spawn printer (void) (sub `(print ,?)))