From 892075a5f701177235c0296c28899563836b42e2 Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Tue, 21 Apr 2015 14:25:25 +0200 Subject: [PATCH] rare zooi --- fp2/week1/mart/Random.dcl | 19 +++++++++++++++++ fp2/week1/mart/Random.icl | 20 ++++++++++++++++++ fp2/week1/mart/RandomGetallen | Bin 0 -> 105976 bytes fp2/week1/mart/RandomGetallen.dcl | 7 +++++++ fp2/week1/mart/RandomGetallen.icl | 33 ++++++++++++++++++++++++++++++ fp2/week2/ReturnEnBind.icl | 19 +++++++++++++++++ 6 files changed, 98 insertions(+) create mode 100644 fp2/week1/mart/Random.dcl create mode 100644 fp2/week1/mart/Random.icl create mode 100755 fp2/week1/mart/RandomGetallen create mode 100644 fp2/week1/mart/RandomGetallen.dcl create mode 100644 fp2/week1/mart/RandomGetallen.icl create mode 100644 fp2/week2/ReturnEnBind.icl diff --git a/fp2/week1/mart/Random.dcl b/fp2/week1/mart/Random.dcl new file mode 100644 index 0000000..47a7c18 --- /dev/null +++ b/fp2/week1/mart/Random.dcl @@ -0,0 +1,19 @@ +definition module Random + + // Random number generator voor Linux gebruikers + // interface compatible met Random.dcl (helaas) + // -- mschool@science.ru.nl + +import StdFile + +:: RandomSeed + +// nullRandomSeed generates a fixed RandomSeed +nullRandomSeed :: RandomSeed + +// GetNewRandomSeed generates a good RandomSeed, using /dev/urandom +getNewRandomSeed :: !*env -> (!RandomSeed, !*env) | FileSystem env + +// Given a RandomSeed, Random generates a random number and a new RandomSeed. +random :: !RandomSeed -> .(!Int, !RandomSeed) + diff --git a/fp2/week1/mart/Random.icl b/fp2/week1/mart/Random.icl new file mode 100644 index 0000000..b6e0768 --- /dev/null +++ b/fp2/week1/mart/Random.icl @@ -0,0 +1,20 @@ +implementation module Random + +import StdFile, StdList, StdMisc, StdArray, Random + +:: RandomSeed :== Int + +nullRandomSeed :: RandomSeed +nullRandomSeed = 0 + +getNewRandomSeed :: !*env -> (!RandomSeed, !*env) | FileSystem env +getNewRandomSeed env +# (ok, src, env) = sfopen "/dev/urandom" FReadData env +| not ok => abort "could not open /dev/urandom" +# (bytes, src) = sfreads src 4 + seed = foldl (\x y->(x<<8)+toInt y) 0 [c \\ c<-:bytes] +| otherwise => (seed, env) + +random :: !RandomSeed -> .(!Int, !RandomSeed) +random seed = (seed>>16 bitand 0xFFFF, seed*0x08088405+1) + diff --git a/fp2/week1/mart/RandomGetallen b/fp2/week1/mart/RandomGetallen new file mode 100755 index 0000000000000000000000000000000000000000..04824375f648722e0f976468577e7b94b8883f97 GIT binary patch literal 105976 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%0AX4H#{U3S&chjMXg_f;4%LAcLLNu<5#5mVMX) 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 ([Int],RandomSeed) +random_inf :: RandomSeed -> [Int] +//shuffle :: [a] RandomSeed -> [a] 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)] diff --git a/fp2/week2/ReturnEnBind.icl b/fp2/week2/ReturnEnBind.icl new file mode 100644 index 0000000..0bece5f --- /dev/null +++ b/fp2/week2/ReturnEnBind.icl @@ -0,0 +1,19 @@ +module ReturnEnBind + +import StdEnv, Random + +Start = 42 + +(bind1) infix 0 :: (St s a) (a -> (St s b)) -> St s b +//(bind1) infix 0 :: (s -> *(a,s)) (a -> (a -> *(a,s))) -> (s -> *(b,s)) +(bind1) f1 f2 = \st0 f2 (fst (f1 st0) (snd (f1 st0)) +// (r, st1) = f1 st0 +//(bind) f f2 :== \st0 -> let (r,st1) = f st0 +// in f2 r st1 + + +som2 :: (RandomSeed -> (Int,RandomSeed)) +som2 ... + +seqList1 :: [St s a] -> St s [a] +seqList1 ... -- 2.20.1