2015/12/17

SICP 問題 3.81

(use srfi-19)

(define (rand-update x)
  (modulo (+ (* x 1103515245) 12345) 2147483647))

;; 命令のストリームを引数にとる
(define (rand stream)
  (define (randoming s)
    (if (number? s)
        (random-update (time-nanosecond (current-time)))
        (random-update s)))
  (define random-stream
    (if (stream-null? stream)
        the-empty-stream
        (let ((s1 (stream-car stream)))
          (cons-stream (if (number? s1)
                           (rand-update s1)
                           (rand-update (time-nanosecond (current-time))))
                       (stream-map randoming
                                   random-stream)))))
  random-stream)

© 2022 wat-aro