diff options
| author | Camil Staps | 2015-04-18 15:34:17 +0200 | 
|---|---|---|
| committer | Camil Staps | 2015-04-18 15:34:17 +0200 | 
| commit | d944842f1ee00d6e919d52b47798a7788477eb29 (patch) | |
| tree | 18e9d2f509f5ee837b7c1e559d8a9755592ef86e /fp2/week1/camil | |
| parent | Added new version opdrachtenbundel (diff) | |
fp2-w1: RandomGetallen
Diffstat (limited to 'fp2/week1/camil')
| -rw-r--r-- | fp2/week1/camil/RandomGetallen.dcl | 7 | ||||
| -rw-r--r-- | fp2/week1/camil/RandomGetallen.icl | 29 | 
2 files changed, 36 insertions, 0 deletions
| diff --git a/fp2/week1/camil/RandomGetallen.dcl b/fp2/week1/camil/RandomGetallen.dcl new file mode 100644 index 0000000..2ca4b27 --- /dev/null +++ b/fp2/week1/camil/RandomGetallen.dcl @@ -0,0 +1,7 @@ +definition module RandomGetallen
 +
 +import Random
 +
 +random_n	:: Int RandomSeed -> ([Int],RandomSeed)
 +random_inf	::     RandomSeed ->  [Int]
 +shuffle		:: [a] RandomSeed ->  [a]
 diff --git a/fp2/week1/camil/RandomGetallen.icl b/fp2/week1/camil/RandomGetallen.icl new file mode 100644 index 0000000..a0a21bf --- /dev/null +++ b/fp2/week1/camil/RandomGetallen.icl @@ -0,0 +1,29 @@ +implementation module RandomGetallen
 +
 +import StdEnv, Random
 +
 +random_n :: Int RandomSeed -> ([Int],RandomSeed)
 +random_n 0 seed = ([], seed)
 +random_n n seed = ([r:rs], s`)
 +where 
 +	(rs,s`) = random_n (n-1) s
 +	(r,s) = random seed	
 +
 +random_inf :: RandomSeed -> [Int]
 +random_inf s = iterateSt random s
 +
 +iterateSt :: (s -> (a,s)) s -> [a]
 +iterateSt f s = [a : iterateSt f s`]
 +where
 +	(a,s`) = f s
 +
 +shuffle :: [a] RandomSeed -> [a]
 +shuffle xs s = (perms xs)!!(fst (random s) rem (factorial (length xs)))
 +
 +perms :: [a] -> [[a]]
 +perms [] = [[]]
 +perms xs = [[xs!!i : xs`] \\ i <- [0..length xs - 1] , xs` <- perms (take i xs ++ drop (i+1) xs)]
 +
 +factorial :: Int -> Int
 +factorial 0 = 1
 +factorial n = n * factorial (n-1)
 | 
