問題3.6 – SICP(計算機プログラムの構造と解釈)その108

問題3.6

(use srfi-27) ;; for random-integer

(define (rand-update x)
  (remainder (+ x 1812433253) 4294967296))

(define rand
  (let ((x 1))
       (define (reset new-value)
         (set! x new-value) x)
       (define (generate)
         (set! x (rand-update x)) x)
       (define (dispatch m)
         (cond ((eq? m 'reset)
                reset)
               ((eq? m 'generate)
                (generate))
               (else
                 (error "Unknown arg -- RAND" (list arg)))))
       dispatch))

((rand 'reset) 100)
gosh> 100
(rand 'generate)
gosh> 1812433353
(rand 'generate)
gosh> 3624866606
(rand 'generate)
gosh> 1142332563
((rand 'reset) 100)
gosh> 100
(rand 'generate)
gosh> 1812433353
(rand 'generate)
gosh> 3624866606
(rand 'generate)
gosh> 1142332563
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»