Module Prelude.Random

Additional random functions.

include module type of struct include Stdlib.Random 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 full_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
val bits32 : unit -> Stdlib.Int32.t
val bits64 : unit -> Stdlib.Int64.t
val nativebits : unit -> Stdlib.Nativeint.t
module State : sig ... end
val get_state : unit -> State.t
val set_state : State.t -> unit
module Array : sig ... end

Random functions for arrays.

val maxbound : int

maxbound is the maximum integer than can be passed to Random.int.

val fisher_yates : 'a array -> 'a array
val shuffle : ?state:State.t -> 'a list -> 'a list

(shuffle ?state list) returns a list, via a Fisher–Yates shuffle, with the same contents as list but in a random order; tail-recursive, O(n).

N.B. this convenience function uses Array.shuffle and hence list makes a round-trip to and from a temporary array. To avoid this cost, you should do your own type conversion whenever possible.

val choose : ?state:Stdlib.Random.State.t -> ?n:int -> int -> 'a list -> 'a list

choose ?state ?n m l: choose m random elements without replacement from a list of length n.

If state is provided, it is used as the random state.

1-pass algorithm due to Knuth; if you don't provide n, requires 2 passes.