17 lines
758 B
Scheme
17 lines
758 B
Scheme
;; This code is taken from:
|
|
;; http://stackoverflow.com/questions/14674165/scheme-generate-random
|
|
;; It is not to be used in cryptography or related fields.
|
|
(define (random) "generates a random number between 0 and 1"
|
|
(let ((a 69069) (c 1) (m (expt 2 32)) (seed 19380110.0))
|
|
(lambda new-seed
|
|
(if (pair? new-seed)
|
|
(begin (set! seed (car new-seed)))
|
|
(begin (set! seed (modulo (+ (* seed a) c) m))))
|
|
(/ seed m))))
|
|
|
|
(define (randint . args) "generate a random integer between the given args(the lower range is optional)"
|
|
(cond ((= (length args) 1) (randint 0 (car args)))
|
|
((= (length args) 2)
|
|
(+ (car args) (floor (* (random) (- (cadr args) (car args))))))
|
|
(else (write "usage: (randint [lo] hi)"))))
|