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)))))) |
|