scheme(gauche)でxorshift乱数
SICP 3.1.2節のために。
(define (shift-32bit n count) (logand (ash n count) #xFFFFFFFF)) (define (make-xorshift-rand x y z w) (lambda() (let ((t (logxor x (shift-32bit x 11)))) (begin (set! x y) (set! y z) (set! z w) (set! w (logxor (logxor w (shift-32bit w -19)) (logxor t (shift-32bit t -8)))))))) (define xorshift-rand (make-xorshift-rand 123456789 362436069 521288629 88675123)) ;;10回呼び出して表示 ((lambda (max) (define (iter counter max) (if (< counter max) (begin (print (xorshift-rand)) (iter (+ counter 1) max)) #t)) (iter 0 max)) 10)