\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