计算机程序的构造和解释 练习题3.6

rand-update使用线性同余法

#lang racket

(define (rand-update x)
  (let ((a 97) (c 3) (m 1000))
    (modulo (+ (* a x) c) m)))

(define random-init 10)

(define rand
  (let ((x random-init))
    (define func
      (lambda ()(set! x (rand-update x)) x))
    (define (dispatch m)
      (cond ((eq? m 'generate) (func))
            ((eq? m 'reset) (lambda (a) (set! x a)))
            (else (error "Unknown request"))))
    dispatch))

(rand 'generate)
(rand 'generate)
(rand 'generate)
((rand 'reset) 5)
(rand 'generate)

运行结果

973
384
251
488
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值