CCRandom
Random Generators
Initialize the generator, using the argument as a seed. The same seed will always yield the same sequence of numbers.
Initialize the generator with a random seed chosen in a system-dependent way. If /dev/urandom
is available on the host machine, it is used to provide a highly random initial seed. Otherwise, a less random seed is computed from system parameters (current time, process IDs).
Random.full_int bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
may be any positive integer.
If bound
is less than 230, Random.full_int bound
is equal to Random.int
bound
. If bound
is greater than 230 (on 64-bit systems or non-standard environments, such as JavaScript), Random.full_int
returns a value, where Random.int
raises Invalid_argument
.
val int32 : Stdlib.Int32.t -> Stdlib.Int32.t
Random.int32 bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0.
val nativeint : Stdlib.Nativeint.t -> Stdlib.Nativeint.t
Random.nativeint bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0.
val int64 : Stdlib.Int64.t -> Stdlib.Int64.t
Random.int64 bound
returns a random integer between 0 (inclusive) and bound
(exclusive). bound
must be greater than 0.
val bits32 : unit -> Stdlib.Int32.t
Random.bits32 ()
returns 32 random bits as an integer between Int32.min_int
and Int32.max_int
.
val bits64 : unit -> Stdlib.Int64.t
Random.bits64 ()
returns 64 random bits as an integer between Int64.min_int
and Int64.max_int
.
val nativebits : unit -> Stdlib.Nativeint.t
Random.nativebits ()
returns 32 or 64 random bits (depending on the bit width of the platform) as an integer between Nativeint.min_int
and Nativeint.max_int
.
The functions from module State
manipulate the current state of the random generator explicitly. This allows using one or several deterministic PRNGs, even in a multi-threaded program, without interference from other parts of the program.
module State = Stdlib.Random.State
val get_state : unit -> State.t
Return the current state of the generator used by the basic functions.
val set_state : State.t -> unit
Set the state of the generator used by the basic functions.
type state = Stdlib.Random.State.t
type 'a t = state -> 'a
Random generator for values of type 'a
.
type 'a random_gen = 'a t
val return : 'a -> 'a t
return x
is the generator that always returns x
. Example: let random_int = return 4 (* fair dice roll *)
.
Delay evaluation. Useful for side-effectful generators that need some code to run for every call. Example:
let gensym = let r = ref 0 in fun () -> incr r; !r ;;
delay (fun () ->
let name = gensym() in
small_int >>= fun i -> return (name,i)
)
val choose_return : 'a list -> 'a t
Choose among the list.
replicate n g
makes a list of n
elements which are all generated randomly using g
.
sample_without_replacement n g
makes a list of n
elements which are all generated randomly using g
with the added constraint that none of the generated random values are equal.
val pick_list : 'a list -> 'a t
Pick an element at random from the list.
val pick_array : 'a array -> 'a t
Pick an element at random from the array.
val small_int : int t
A small int (100).
val int : int -> int t
Random int within the given range.
val int_range : int -> int -> int t
Inclusive range.
val small_float : float t
A reasonably small float (100.0).
val float : float -> float t
Random float within the given range.
val float_range : float -> float -> float t
Inclusive range. float_range a b
assumes a < b
.
val split : int -> (int * int) option t
Split a positive value n
into n1,n2
where n = n1 + n2
.
val split_list : int -> len:int -> int list option t
Split a value n
into a list of values whose sum is n
and whose length is length
. The list is never empty and does not contain 0
.
retry g
calls g
until it returns some value, or until the maximum number of retries was reached. If g
fails, then it counts for one iteration, and the generator retries.
try_successively l
tries each generator of l
, one after the other. If some generator succeeds its result is returned, else the next generator is tried.
a <?> b
is a choice operator. It first tries a
, and returns its result if successful. If a
fails, then b
is returned.
val fix :
?sub1:('a t -> 'a t) list ->
?sub2:('a t -> 'a t -> 'a t) list ->
?subn:(int t * ('a list t -> 'a t)) list ->
base:'a t ->
int t ->
'a t
Recursion combinators, for building recursive values. The integer generator is used to provide fuel. The sub_
generators should use their arguments only once!
val pure : 'a -> 'a t