(define (make-rand-stream)
(let ((mt (make <mersenne-twister> :seed (sys-time)))
(range 10000))
(let ((random-init (mt-random-integer mt range)))
(define (rand-update y)
(mt-random-set-seed! mt y)
(mt-random-integer mt range))
(define (generate new-value)
(define rand-numbers
(cons-stream new-value
(stream-map rand-update rand-numbers)))
rand-numbers)
(define (dispatch m)
(cond ((eq? m 'generate) (generate random-init))
((eq? m 'reset) (lambda (new-value) (generate new-value)))
(else
(error "Unknown method -- MODIFIED-RAND" m))))
dispatch)))
(define rand-generator (make-rand-stream))
(define random-numbers (rand-generator 'generate))
(define (make-rand-stream)
(let ((mt (make <mersenne-twister> :seed (sys-time)))
(range 10000))
(let ((random-init (mt-random-integer mt range)))
(define (rand-update y)
(mt-random-set-seed! mt y)
(mt-random-integer mt range))
(define (generate new-value)
(define rand-numbers
(cons-stream new-value
(stream-map rand-update rand-numbers)))
rand-numbers)
(define (dispatch m)
(cond ((eq? m 'generate) (generate random-init))
((eq? m 'reset) (lambda (new-value) (generate new-value)))
(else
(error "Unknown method -- MODIFIED-RAND" m))))
dispatch)))
(define rand-generator (make-rand-stream))
(define random-numbers (rand-generator 'generate))