rand-update使用线性同余法
#lang racket
(define (rand-update x)
(let ((a 97) (c 3) (m 1000))
(modulo (+ (* a x) c) m)))
(define random-init 10)
(define rand
(let ((x random-init))
(define func
(lambda ()(set! x (rand-update x)) x))
(define (dispatch m)
(cond ((eq? m 'generate) (func))
((eq? m 'reset) (lambda (a) (set! x a)))
(else (error "Unknown request"))))
dispatch))
(rand 'generate)
(rand 'generate)
(rand 'generate)
((rand 'reset) 5)
(rand 'generate)
运行结果
973
384
251
488