StdSet werkend
[fp1415.git] / week3 / mart / StdSortList.icl
1 implementation module StdSortList
2
3 import StdEnv
4
5 :: SortList a :== ([a], a)
6
7 newSortList :: SortList a
8 newSortList = ([], abort "Empty list")
9
10 memberSort :: a (SortList a) -> Bool | Eq, Ord a
11 memberSort e ([], y) = y
12 memberSort e ([x:xs], y)
13 | e == x = True
14 | e > x = False
15 | otherwise = memberSort e (xs, y)
16
17 insertSort :: a (SortList a) -> SortList a | Ord a
18 insertSort e ([], y) = ([e], e)
19 insertSort e ([x:xs], y)
20 | e <= x = ([e:x:xs], y)
21 | otherwise = ([x:fst result], snd result)
22 where result = insertSort e (xs, y)
23
24 removeFirst :: a (SortList a) -> SortList a | Eq, Ord a
25 removeFirst e ([], y) = y
26 removeFirst e ([e], e) = newSortList
27 removeFirst e ([x:xs], y)
28 | e == x = ([xs], y)
29 removeFirst _ _ = abort ""
30
31 removeAll :: a (SortList a) -> SortList a | Eq, Ord a
32 removeAll _ _ = abort ""
33
34 elements :: (SortList a) -> [a]
35 elements _ = abort ""
36
37 count :: (SortList a) -> Int
38 count _ = abort ""
39
40 minimum :: (SortList a) -> a
41 minimum _ = abort ""
42
43 maximum :: (SortList a) -> a
44 maximum _ = abort ""
45
46 mergeSortList :: (SortList a) (SortList b) -> (SortList a)
47 mergeSortList _ _ = abort ""
48
49 Start :: String
50 Start = newSortList