SICP問題3.6

テスト用のrand-update。超てきとー。

(define (rand-update x)
  (+ x 1))

randの定義

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

テスト

((rand 'reset) 2)
; 2
(rand 'generate)
; 3
(rand 'generate)
; 4
((rand 'reset) 10)
; 10
(rand 'generate)
; 11

OK