From 892075a5f701177235c0296c28899563836b42e2 Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Tue, 21 Apr 2015 14:25:25 +0200 Subject: rare zooi --- fp2/week1/mart/RandomGetallen.icl | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 fp2/week1/mart/RandomGetallen.icl (limited to 'fp2/week1/mart/RandomGetallen.icl') diff --git a/fp2/week1/mart/RandomGetallen.icl b/fp2/week1/mart/RandomGetallen.icl new file mode 100644 index 0000000..b756c91 --- /dev/null +++ b/fp2/week1/mart/RandomGetallen.icl @@ -0,0 +1,33 @@ +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)] -- cgit v1.2.3