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