1 implementation module RandomGetallen
5 random_n :: Int RandomSeed -> ([Int],RandomSeed)
6 random_n 0 seed = ([], seed)
7 random_n n seed = ([r:rs], s`)
9 (rs,s`) = random_n (n-1) s
12 random_inf :: RandomSeed -> [Int]
13 random_inf s = iterateSt random s
15 iterateSt :: (s -> (a,s)) s -> [a]
16 iterateSt f s = [a : iterateSt f s`]
20 shuffle :: [a] RandomSeed -> [a]
21 shuffle xs s = (perms xs)!!(fst (random s) rem (factorial (length xs)))
25 perms xs = [[xs!!i : xs`] \\ i <- [0..length xs - 1] , xs` <- perms (take i xs ++ drop (i+1) xs)]
27 factorial :: Int -> Int
29 factorial n = n * factorial (n-1)