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)