読者です 読者をやめる 読者になる 読者になる

(wat-aro)

無職から有職者にランクアップしました

SICP 問題 3.06

scheme SICP
;; オリジナルのrand
(define rand (let ((x random-init))
               (lambda ()
                 (set! x (rand-update x))
                 x)))

;; 'generateで乱数生成,'resetで引数の数字で初期化するrand
(define rand
  (let ((x random-init))
    (define (reset new-rand)
      (set! x new-rand)
      x)
    (define (generate)
      (set! x (rand-update x)))
    (define (dispatch m)
      (cond ((eq? m 'reset)
             reset)
            ((eq? m 'generate)
             (generate))
            (else
             (error "Unknown argument -- RAND" (list m)))))
    dispatch))