git @ Cat's Eye Technologies Robin / master eg / random.robin
master

Tree @master (Download .tar.gz)

random.robin @masterraw · history · blame

;''Continually generate random numbers from 0 to 65535
and output the last digit of each number so generated.

Note that the Robin definition of remainder, currently,
is incredibly inefficient.  You probably want to run
this with an optimized implementation of remainder.''

(require let) (require choose) (require list) (require abs) (require remainder)

(reactor (line-terminal random-u16-source) 0
  (fexpr (args env)
    (let ((event (head args))
          (event-type (head event))
          (event-payload (head (tail event))))
      (choose
        ((equal? event-type (literal init))
          (list 0
            (list (literal obtain-random-u16) 0)))
        ((equal? event-type (literal random-u16))
          (list 0
            (list (literal writeln) (list (add (remainder (abs event-payload) 10) 48)))
            (list (literal obtain-random-u16) 0)))
        (else
          (list 0))))))