StdSet werkend
[fp1415.git] / week3 / mart / StdSortList.icl
index 2c8ad3f..db71a36 100644 (file)
@@ -2,42 +2,49 @@ implementation module StdSortList
 \r
 import StdEnv\r
 \r
-::  SortList a = SortList (SortList a, a, SortList a) | Empty\r
+::  SortList a :== ([a], a)\r
 \r
 newSortList :: SortList a\r
-newSortList = Empty\r
+newSortList = ([], abort "Empty list")\r
 \r
 memberSort :: a (SortList a) -> Bool | Eq, Ord a\r
-memberSort x Empty = False\r
-memberSort x (le, el, gr)\r
-| x == e = True\r
-| x < el = memberSort x le\r
-| otherwise = memberSort x gr\r
+memberSort e ([], y) = y\r
+memberSort e ([x:xs], y)\r
+| e == x = True\r
+| e > x = False\r
+| otherwise = memberSort e (xs, y)\r
 \r
 insertSort :: a (SortList a) -> SortList a | Ord a\r
-memberSort x Empty = Sortlist (Empty, x, Empty)\r
-memberSort x (le, el, gr)\r
+insertSort e ([], y) = ([e], e)\r
+insertSort e ([x:xs], y)\r
+| e <= x = ([e:x:xs], y)\r
+| otherwise = ([x:fst result], snd result)\r
+       where result = insertSort e (xs, y)\r
 \r
 removeFirst :: a (SortList a) -> SortList a | Eq, Ord a\r
-removeFirst e ([], _)_ = ([], _)\r
+removeFirst e ([], y) = y\r
+removeFirst e ([e], e) = newSortList\r
+removeFirst e ([x:xs], y)\r
+| e == x = ([xs], y)\r
+removeFirst _ _ = abort ""\r
 \r
-removeAll :: a (SortList a) -> SortList a\r
-removeAll _ _ = Empty\r
+removeAll :: a (SortList a) -> SortList a | Eq, Ord a\r
+removeAll _ _ = abort ""\r
 \r
 elements :: (SortList a) -> [a]\r
-elements _ = []\r
+elements _ = abort ""\r
 \r
 count :: (SortList a) -> Int\r
-count _ = 0\r
+count _ = abort ""\r
 \r
 minimum :: (SortList a) -> a\r
-minimum _ = 0\r
+minimum _ = abort ""\r
 \r
 maximum :: (SortList a) -> a\r
-maximum _ = 0\r
+maximum _ = abort ""\r
 \r
 mergeSortList :: (SortList a) (SortList b) -> (SortList a)\r
-mergeSortList _ _ = Empty\r
+mergeSortList _ _ = abort ""\r
 \r
 Start :: String\r
 Start = newSortList\r