implementation module RandomGetallen import StdEnv, Random //Start :: *World -> ([Int],*World) //Start world //# (rs,world) = getNewRandomSeed world //= (shuffle [1..10] rs,world) Start = shuffle [1..10] nullRandomSeed random_n :: Int RandomSeed -> ([Int],RandomSeed) random_n n seed = seqList (repeatn n random) seed random_inf :: RandomSeed -> [Int] random_inf seed = iterateSt random seed iterateSt :: (s -> (a,s)) s -> [a] iterateSt f s = [a : iterateSt f s`] where (a,s`) = f s shuffle :: [a] RandomSeed -> [a] shuffle xs seed = (perms xs) !! ((fst (random seed)) rem (fac (length xs))) fac :: Int -> Int fac 0 = 1 fac n = n * fac (n-1) perms :: [a] -> [[a]] perms [] = [[]] perms xs = [[xs!!i : xs`] \\ i <- [0..length xs - 1] , xs` <- perms (take i xs ++ drop (i+1) xs)]