diff options
author | Mart Lubbers | 2015-04-16 21:22:20 +0200 |
---|---|---|
committer | Mart Lubbers | 2015-04-16 21:22:20 +0200 |
commit | 6f604b19d3f5966e5c1d7c4fdf3703bd6ff0861c (patch) | |
tree | 96d580507249f7f58368476d9113007d4afcd748 /fp1/week4/camil | |
parent | Added student numbers (diff) |
update to fp2 yay, public and licence
Diffstat (limited to 'fp1/week4/camil')
-rw-r--r-- | fp1/week4/camil/5.4 | 5 | ||||
-rw-r--r-- | fp1/week4/camil/StdSet.dcl | 25 | ||||
-rw-r--r-- | fp1/week4/camil/StdSet.icl | 64 |
3 files changed, 94 insertions, 0 deletions
diff --git a/fp1/week4/camil/5.4 b/fp1/week4/camil/5.4 new file mode 100644 index 0000000..accd855 --- /dev/null +++ b/fp1/week4/camil/5.4 @@ -0,0 +1,5 @@ +1. Optelling in de gehele getallen is commutatief, dit maakt dus niet uit. +2. Het verschil tussen 4-2=2 en 2-4=-2. + Algemeen: het verschill tussen (-) a b = a-b en flip (-) a b = b-a, dus (-) a b = - flip (-) a b +3. Vermenigvuldiging in de gehele getallen is commutatief, dit maakt dus niet uit. +3. Het verschil tussen 4/2=2 en 2/4=0. diff --git a/fp1/week4/camil/StdSet.dcl b/fp1/week4/camil/StdSet.dcl new file mode 100644 index 0000000..6cad7f1 --- /dev/null +++ b/fp1/week4/camil/StdSet.dcl @@ -0,0 +1,25 @@ +definition module StdSet
+
+import StdClass
+
+:: Set a
+
+toSet :: [a] -> Set a | Eq a
+fromSet :: (Set a) -> [a]
+
+isEmptySet :: (Set a) -> Bool
+isDisjoint :: (Set a) (Set a) -> Bool | Eq a
+isSubset :: (Set a) (Set a) -> Bool | Eq a
+isStrictSubset :: (Set a) (Set a) -> Bool | Eq a
+memberOfSet :: a (Set a) -> Bool | Eq a
+union :: (Set a) (Set a) -> Set a | Eq a
+intersection :: (Set a) (Set a) -> Set a | Eq a
+nrOfElements :: (Set a) -> Int
+without :: (Set a) (Set a) -> Set a | Eq a
+
+product :: (Set a) (Set b) -> Set (a,b)
+
+instance zero (Set a)
+instance == (Set a) | Eq a
+
+powerSet :: (Set a) -> Set (Set a)
diff --git a/fp1/week4/camil/StdSet.icl b/fp1/week4/camil/StdSet.icl new file mode 100644 index 0000000..651c869 --- /dev/null +++ b/fp1/week4/camil/StdSet.icl @@ -0,0 +1,64 @@ +implementation module StdSet
+
+import StdEnv
+import StdClass
+
+:: Set a :== [a]
+
+toSet :: [a] -> Set a | Eq a
+toSet l = toSet` l []
+where
+ toSet` [] s = s
+ toSet` [x:xs] s = toSet` xs (join x s)
+ where
+ join :: a (Set a) -> Set a | Eq a
+ join e s
+ | memberOfSet e s = s
+ | otherwise = s ++ [e]
+
+fromSet :: (Set a) -> [a]
+fromSet s = s
+
+isEmptySet :: (Set a) -> Bool
+isEmptySet [] = True
+isEmptySet _ = False
+
+isDisjoint :: (Set a) (Set a) -> Bool | Eq a
+isDisjoint s1 s2 = length (intersection s1 s2) == 0
+
+isSubset :: (Set a) (Set a) -> Bool | Eq a
+isSubset s1 s2 = nrOfElements (intersection s1 s2) == nrOfElements s1
+
+isStrictSubset :: (Set a) (Set a) -> Bool | Eq a
+isStrictSubset s1 s2 = isSubset s1 s2 && s1 <> s2
+
+memberOfSet :: a (Set a) -> Bool | Eq a
+memberOfSet e [] = False
+memberOfSet e [x:xs]
+ | e == x = True
+ | otherwise = memberOfSet e xs
+
+union :: (Set a) (Set a) -> Set a | Eq a
+union s1 s2 = toSet (s1 ++ s2)
+
+intersection :: (Set a) (Set a) -> Set a | Eq a
+intersection s1 s2 = [e \\ e <- s1 | memberOfSet e s2]
+
+nrOfElements :: (Set a) -> Int
+nrOfElements s = length (fromSet s)
+
+without :: (Set a) (Set a) -> Set a | Eq a
+without s1 s2 = [e \\ e <- s1 | (memberOfSet e s2) == False]
+
+product :: (Set a) (Set b) -> Set (a,b)
+product s1 s2 = [(e1,e2) \\ e1 <- s1, e2 <- s2]
+
+instance zero (Set a)
+where zero = []
+
+instance == (Set a) | Eq a
+where (==) s1 s2 = isSubset s1 s2 && isSubset s2 s1
+
+powerSet :: (Set a) -> Set (Set a)
+powerSet [] = [zero]
+powerSet [e:es] = map ((++) [e]) (powerSet es) ++ powerSet es
\ No newline at end of file |