This SRFI defines a set of SRFI 121 generators and generator makers that yield random data of specific types and distributions. It is intended to be implemented on top of SRFI 27.

`random-source-parameter`

[Variable]A SRFI 39 or R7RS parameter whose value, when invoked as a thunk, is the random source used by the procedures in this SRFI. By using

`parameterize`

, it is possible to substitute another random source during the dynamic extent of the body.

Those generators generate uniformly distributed data.

In the following examples, we use the `generator->list`

procedure to show
some concrete data from the generators.

`make-random-integer-generator`

*lower-bound upper-bound*Create exact integer generators. Creates a generator that generates integers between

`lower-bound`(inclusive) and`upper-bound`(exclusive) uniformly.;; A die roller (define die (make-random-integer-generator 1 7)) ;; Roll the die 10 times (generator->list die 10) ⇒ (6 6 2 4 2 5 5 1 2 2)

`random-u8-generator`

`random-s8-generator`

`random-u16-generator`

`random-s16-generator`

`random-u32-generator`

`random-s32-generator`

`random-u64-generator`

`random-s64-generator`

Uniform integer generators that generate integers in the ranges of 8, 16, 32, and 64-bit signed and unsigned integers.

(generator->list random-s8-generator 10) ⇒ (20 -101 50 -99 -111 -28 -19 -61 39 110)

`random-boolean-generator`

Generates boolean values (

`#f`

and`#t`

) with equal probability.(generator->list random-boolean-generator 10) ⇒ (#f #f #t #f #f #t #f #f #f #f)

`make-random-char-generator`

*[ char-set ]*Returns a generator that generates characters in the SRFI 14

`char-set`uniformly. The default`char-set`is`[A-Za-z0-9]`

.(define alphanumeric-chars (make-random-char-generator)) (generator->list alphanumeric-chars 10) ⇒ (#\f #\m #\3 #\S #\z #\m #\x #\S #\l #\y)

`make-random-string-generator`

*[ k char-set ]*Returns a generator that generates random strings whose characters are in the SRFI 14

`char-set`. The default`char-set`is`[A-Za-z0-9]`

. The strings are all less than`k`characters in length.

`make-random-real-generator`

*lower-bound upper-bound*Returns a generator that generates inexact real numbers uniformly. The procedure returns reals between lower-bound and upper-bound, both exclusive.

(define uniform-100 (make-random-real-generator 0 100)) (generator->list uniform-100 10) ⇒ (81.67965004942268 81.84927577572596 53.02443813660833)

Note that a generator from

`make-random-real-generator`

can generate the upper-bound, as opposed to`make-random-integer-generator`

. If you need to exclude the bound value, just discard it; SRFI 121`gfilter`

may come handy.(define generate-from-0-below-1 (gfilter (lambda (r) (not (= r 1.0))) (make-random-real-generator 0.0 1.0)))

`make-normal-generator`

*[ mean [ deviation ] ]*Creates a generator that yields real numbers from a normal distribution with the specified

`mean`and`deviation`. The default value of`mean`is 0.0 and`deviation`is 1.0.

`make-exponential-generator`

*mean*Creates a generator that yields real numbers from an exponential distribution with the specified

`mean`.

`make-geometric-generator`

*p*Creates a generator that yields integers from the geometric distribution with success probability

`p`(0 <= p <= 1). The mean is`1/p`

and variance is`(1-p)/p^2`

.

`make-poisson-generator`

*L*Creates a generator that yields integers from the Poisson distribution with mean

`L`, variance`L`.