SICP問題3.6 乱数

乱数生成のアルゴリズムとしてメルセンヌツイスターを使うときにはsrfi-27を使います。
テストをするときなど、乱数列を再現させたいときがあります。
以下のrand関数は((rand 'reset) <非負の整数i> <非負の整数j>)で乱数源を初期化します。
(rand 'generate)を複数回実行することにより、乱数列が得られます。
この乱数列を再現させたいときには、((rand 'reset) <非負の整数i> <非負の整数j>)を再実行してから(rand 'generate)します。

(use srfi-27)

(define (rand x)
  (cond [(eq? x 'generate) (random-real)]
        [(eq? x 'reset) (lambda (i j)
                          (random-source-pseudo-randomize!
                           default-random-source i j))]
        [else (error "Incorrect argument -- RAND" x)]))