summaryrefslogtreecommitdiff
path: root/week3/camil/StdSortList.icl
diff options
context:
space:
mode:
Diffstat (limited to 'week3/camil/StdSortList.icl')
-rw-r--r--week3/camil/StdSortList.icl60
1 files changed, 60 insertions, 0 deletions
diff --git a/week3/camil/StdSortList.icl b/week3/camil/StdSortList.icl
new file mode 100644
index 0000000..759e915
--- /dev/null
+++ b/week3/camil/StdSortList.icl
@@ -0,0 +1,60 @@
+implementation module StdSortList
+
+import StdEnv
+
+:: SortList a :== [a]
+
+newSortList :: (SortList a)
+newSortList = []
+
+memberSort :: a (SortList a) -> Bool | Eq, Ord a // is element van
+memberSort _ [] = False
+memberSort m l
+ | hd l == m = True
+ | hd l > m = False
+ | otherwise = memberSort m (tl l)
+
+insertSort :: a (SortList a) -> SortList a | Ord a // voeg element toe
+insertSort m l = insertSort` newSortList m l
+where
+ insertSort` :: (SortList a) a (SortList a) -> (SortList a) | Ord a
+ insertSort` l1 m l2
+ | count l2 == 0 = l1 ++ [m]
+ | minimum l2 >= m = l1 ++ [m] ++ l2
+ | otherwise = insertSort` (l1 ++ [hd l2]) m (tl l2)
+
+removeFirst :: a (SortList a) -> SortList a | Eq, Ord a // verwijder eerste voorkomen
+removeFirst m l = removeFirst` newSortList m l
+where
+ removeFirst` :: (SortList a) a (SortList a) -> (SortList a) | Eq, Ord a
+ removeFirst` l1 m l2
+ | count l2 == 0 = l1
+ | minimum l2 > m = l1 ++ l2
+ | minimum l2 == m = l1 ++ tl l2
+ | otherwise = removeFirst` (l1 ++ [hd l2]) m (tl l2)
+
+removeAll :: a (SortList a) -> SortList a | Eq, Ord a // verwijder alle voorkomens
+removeAll m l = removeAll` newSortList m l
+where
+ removeAll` :: (SortList a) a (SortList a) -> (SortList a) | Eq, Ord a
+ removeAll` l1 m l2
+ | count l2 == 0 = l1
+ | minimum l2 > m = l1 ++ l2
+ | minimum l2 == m = removeAll` l1 m (tl l2)
+ | otherwise = removeAll` (l1 ++ [hd l2]) m (tl l2)
+
+elements :: (SortList a) -> [a] // geef alle elementen
+elements l = l
+
+count :: (SortList a) -> Int // aantal elementen
+count l = length l
+
+minimum :: (SortList a) -> a // huidige minimum waarde
+minimum l = hd l
+
+maximum :: (SortList a) -> a // huidige maximum waarde
+maximum l = last l
+
+mergeSortList :: (SortList a) (SortList a) -> SortList a | Eq, Ord a // meng gesorteerde lijsten
+mergeSortList l1 [] = l1
+mergeSortList l1 l2 = mergeSortList (insertSort (hd l2) l1) (tl l2)