3.6 Exercise 3.6
Wrapping rand in a message handler that allows for generating new
random numbers as well as resetting the current random number with the
initial value (the random-init value) is not especially hard. I’ve
chosen to have the ’generate message return the new random number,
while the ’reset message returns nothing of value.
(define rand | (let ((x random-init)) | (lambda (m) | (cond ((eq? m 'generate) | (begin | (set! x (rand-update x)) | x)) | ((eq? m 'reset) | (lambda (new-value) | (set! x new-value) | x)) | (else (error "Invalid message -- RAND" m)))))) |
|