examples/example-0.ss
; Example 0 - Functions as Events

(require (planet "simulation.ss"
                 ("williams" "simulation.plt")))
(require (planet "random-distributions.ss"
                 ("williams" "science.plt")))

(define (generator n)
  (do ((i 0 (+ i 1)))
    ((= i n) (void))
    (wait (random-exponential 4.0))
    (schedule now (customer i))))

(define (customer i)
  (printf "~a: customer ~a enters~n"
          (current-simulation-time) i)
  (work (random-flat 2.0 10.0))
  (printf "~a: customer ~a leaves~n"
          (current-simulation-time) i))

(define (run-simulation n)
  (with-new-simulation-environment
   (schedule (at 0.0) (generator n))
   (start-simulation)))

(run-simulation 10)