Module CCRandom
Random Generators
include module type of sig ... end
val init : int -> unit
val full_init : int array -> unit
val self_init : unit -> unit
val bits : unit -> int
val int : int -> int
val int32 : Stdlib.Int32.t -> Stdlib.Int32.t
val nativeint : Stdlib.Nativeint.t -> Stdlib.Nativeint.t
val int64 : Stdlib.Int64.t -> Stdlib.Int64.t
val float : float -> float
val bool : unit -> bool
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 returnsx
. Example:let random_int = return 4 (* fair dice roll *)
.
val (>|=) : 'a t -> ('a -> 'b) -> 'b t
val delay : (unit -> 'a t) -> 'a t
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) )
- since
- 0.4
val choose_exn : 'a t list -> 'a t
Like
choose
but without option.- raises Invalid_argument
if the list is empty.
val choose_return : 'a list -> 'a t
Choose among the list.
- raises Invalid_argument
if the list is empty.
val replicate : int -> 'a t -> 'a list t
replicate n g
makes a list ofn
elements which are all generated randomly usingg
.
val sample_without_replacement : compare:('a -> 'a -> int) -> int -> 'a t -> 'a list t
sample_without_replacement n g
makes a list ofn
elements which are all generated randomly usingg
with the added constraint that none of the generated random values are equal.- deprecated
use sample_without_duplicates instead
- raises Invalid_argument
if
n <= 0
.
- since
- 0.15
val sample_without_duplicates : cmp:('a -> 'a -> int) -> int -> 'a t -> 'a list t
sample_without_replacement n g
makes a list ofn
elements which are all generated randomly usingg
with the added constraint that none of the generated random values are equal.- raises Invalid_argument
if
n <= 0
.
- since
- 2.4
val pick_list : 'a list -> 'a t
Pick an element at random from the list.
- raises Pick_from_empty
if the list is empty.
- since
- 0.16
val pick_array : 'a array -> 'a t
Pick an element at random from the array.
- raises Pick_from_empty
if the array is empty.
- since
- 0.16
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).
- since
- 0.6.1
val float : float -> float t
Random float within the given range.
- since
- 0.6.1
val float_range : float -> float -> float t
Inclusive range.
float_range a b
assumesa < b
.- since
- 0.6.1
val split : int -> (int * int) option t
Split a positive value
n
inton1,n2
wheren = n1 + n2
.- returns
None
if the value is too small.
val split_list : int -> len:int -> int list option t
Split a value
n
into a list of values whose sum isn
and whose length islength
. The list is never empty and does not contain0
.- raises Invalid_argument
if
len <= 1
.
- returns
None
if the value is too small.
val retry : ?max:int -> 'a option t -> 'a option t
retry g
callsg
until it returns some value, or until the maximum number of retries was reached. Ifg
fails, then it counts for one iteration, and the generator retries.- parameter max:
maximum number of retries. Default
10
.
val try_successively : 'a option t list -> 'a option t
try_successively l
tries each generator ofl
, one after the other. If some generator succeeds its result is returned, else the next generator is tried.
val (<?>) : 'a option t -> 'a option t -> 'a option t
a <?> b
is a choice operator. It first triesa
, and returns its result if successful. Ifa
fails, thenb
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!- parameter sub1
cases that recurse on one value.
- parameter sub2
cases that use the recursive gen twice.
- parameter subn
cases that use a list of recursive cases.