From 6f604b19d3f5966e5c1d7c4fdf3703bd6ff0861c Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Thu, 16 Apr 2015 21:22:20 +0200 Subject: update to fp2 yay, public and licence --- week3/camil/StdSortList.icl | 64 --------------------------------------------- 1 file changed, 64 deletions(-) delete mode 100644 week3/camil/StdSortList.icl (limited to 'week3/camil/StdSortList.icl') diff --git a/week3/camil/StdSortList.icl b/week3/camil/StdSortList.icl deleted file mode 100644 index 21778bd..0000000 --- a/week3/camil/StdSortList.icl +++ /dev/null @@ -1,64 +0,0 @@ -// Ik kreeg het alleen werkend door de .dcl ook aan te passen. -// Met een record dat het maximum bijhoudt moet je er namelijk vanuit kunnen gaan dat zero gedefinieerd is voor type a. - -implementation module StdSortList - -import StdEnv - -:: SortList a = {list :: [a], max :: a} - -newSortList :: (SortList a) | zero a -newSortList = {list=[], max=zero} - -memberSort :: a (SortList a) -> Bool | Eq, Ord a // is element van -memberSort _ {list=[],max=_} = False -memberSort m l - | minimum l == m = True - | minimum l > m = False - | otherwise = memberSort m {list=(tl l.list),max=l.max} - -insertSort :: a (SortList a) -> SortList a | Ord a // voeg element toe -insertSort m l = insertSort` {list=[],max=l.max} m l -where - insertSort` :: (SortList a) a (SortList a) -> (SortList a) | Ord a - insertSort` l1 m l2 - | count l2 == 0 = {list=l1.list ++ [m], max=m} - | minimum l2 >= m = {list=l1.list ++ [m] ++ l2.list, max=l2.max} - | otherwise = insertSort` {list=l1.list ++ [hd l2.list], max=hd l2.list} m {list=(tl l2.list), max=l2.max} - -removeFirst :: a (SortList a) -> SortList a | Eq, Ord, zero 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 = {list=l1.list ++ l2.list, max=l2.max} - | minimum l2 == m && count l2 == 1 = {list=l1.list ++ tl l2.list, max=l1.max} - | minimum l2 == m = {list=l1.list ++ tl l2.list, max=l2.max} - | otherwise = removeFirst` {list=(l1.list ++ [hd l2.list]),max=hd l2.list} m {list=(tl l2.list), max=l2.max} - -removeAll :: a (SortList a) -> SortList a | Eq, Ord, zero 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 = {list=l1.list ++ l2.list, max=l2.max} - | minimum l2 == m = removeAll` l1 m {list=tl l2.list, max=l2.max} - | otherwise = removeAll` {list=l1.list ++ [hd l2.list], max=hd l2.list} m {list=tl l2.list,max=l2.max} - -elements :: (SortList a) -> [a] // geef alle elementen -elements l = l.list - -count :: (SortList a) -> Int // aantal elementen -count l = length l.list - -minimum :: (SortList a) -> a // huidige minimum waarde -minimum l = hd l.list - -maximum :: (SortList a) -> a // huidige maximum waarde -maximum l = l.max - -mergeSortList :: (SortList a) (SortList a) -> SortList a | Eq, Ord, zero a // meng gesorteerde lijsten -mergeSortList l1 {list=[],max=_} = l1 -mergeSortList l1 l2 = mergeSortList (insertSort (hd l2.list) l1) {list=tl l2.list,max=l2.max} -- cgit v1.2.3