hsc3-lang-0.15: Haskell SuperCollider Language

Safe HaskellNone
LanguageHaskell98

Sound.SC3.Lang.Random.Gen

Description

RandomGen based sclang random number functions.

Synopsis

Documentation

rand :: (RandomGen g, Random n, Num n) => n -> g -> (n, g) Source

SimpleNumber.rand is randomR in (0,n).

r_iterate :: (t -> (a, t)) -> t -> [a] Source

State modifying variant of iterate. Lifts random generator functions to infinte lists.

let r = [3,1,7,0,12,1,6,4,12,11,7,4]
in take 12 (r_iterate (rand 12) (mkStdGen 0)) == r

mk_kvariant :: r -> (t -> r -> r) -> (r -> r') -> Int -> (g -> (t, g)) -> g -> (r', g) Source

Function underlying both kvariant and kvariant'.

kvariant :: Int -> (g -> (a, g)) -> g -> ([a], g) Source

Construct variant of f generating k values. Note that the result is the reverse of the initial sequence given by r_iterate.

let r = [3,1,7,0,12,1,6,4,12,11,7,4]
in fst (kvariant 12 (rand 12) (mkStdGen 0)) == reverse r

kvariant' :: Int -> (g -> (a, g)) -> g -> ([a], g) Source

Variant of kvariant that generates sequence in the same order as r_iterate. There is perhaps a slight overhead from using a difference list.

let r = [3,1,7,0,12,1,6,4,12,11,7,4]
in fst (kvariant' 12 (rand 12) (mkStdGen 0)) == r

nrand :: (RandomGen g, Random n, Num n) => Int -> n -> g -> ([n], g) Source

Variant of rand generating k values.

fst (nrand 10 (5::Int) (mkStdGen 246873)) == [0,5,4,0,4,5,3,2,3,1]

s_rand :: (RandomGen g, Random n, Num n) => n -> g -> [n] Source

Stream variant of rand.

rand2 :: (RandomGen g, Random n, Num n) => n -> g -> (n, g) Source

SimpleNumber.rand2 is randomR in (-n,n).

s_rand2 :: (RandomGen g, Random n, Num n) => n -> g -> [n] Source

Stream variant of rand2.

nrand2 :: (RandomGen g, Random a, Num a) => Int -> a -> g -> ([a], g) Source

Variant of rand2 generating k values.

rrand :: (Random n, RandomGen g) => n -> n -> g -> (n, g) Source

SimpleNumber.rrand is curry randomR.

nrrand :: (RandomGen g, Random a, Num a) => Int -> a -> a -> g -> ([a], g) Source

Variant of rrand generating k values.

choose :: RandomGen g => [a] -> g -> (a, g) Source

SequenceableCollection.choose selects an element at random.

nchoose :: RandomGen g => Int -> [a] -> g -> ([a], g) Source

Variant of choose generating k values.

exprand :: (Floating n, Random n, RandomGen g) => n -> n -> g -> (n, g) Source

SimpleNumber.exprand generates exponentially distributed random number in the given interval.

nexprand :: (Floating n, Random n, RandomGen g) => Int -> n -> n -> g -> ([n], g) Source

Variant of exprand generating k values.

coin :: (RandomGen g, Random a, Ord a, Fractional a) => a -> g -> (Bool, g) Source

SimpleNumber.coin is True at given probability, which is in range (0,1).

ncoin :: (RandomGen g, Random a, Ord a, Fractional a) => Int -> a -> g -> ([Bool], g) Source

Variant of coin generating k values.

fst (ncoin 5 0.5 (mkStdGen 0)) == [True,True,False,True,False]

scramble :: RandomGen g => [t] -> g -> ([t], g) Source

List.scramble shuffles the elements.

fst (scramble [1..5] (mkStdGen 0)) == [1,5,2,3,4]

wchoose :: (RandomGen g, Random a, Ord a, Fractional a) => [b] -> [a] -> g -> (b, g) Source

SequenceableCollection.wchoose selects an element from a list given a list of weights which sum to 1.

kvariant 10 (wchoose "abcd" (C.normalizeSum [8,4,2,1])) (mkStdGen 0)

wchoose_N :: (Fractional a, Ord a, RandomGen g, Random a) => [b] -> [a] -> g -> (b, g) Source

Variant that applies normalizeSum to weights.

let r = "dcbbacaadd"
in r == fst (kvariant 10 (wchoose_N "abcd" [8,4,2,1]) (mkStdGen 0))

nwchoose_N :: (Fractional a, Ord a, RandomGen g, Random a) => Int -> [b] -> [a] -> g -> ([b], g) Source