summaryrefslogtreecommitdiff
path: root/fp1/week3/mart/StdSortList.icl
blob: db71a363a206a5c543a5cc73690819834e53c708 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
implementation module StdSortList

import StdEnv

::  SortList a :== ([a], a)

newSortList :: SortList a
newSortList = ([], abort "Empty list")

memberSort :: a (SortList a) -> Bool | Eq, Ord a
memberSort e ([], y) = y
memberSort e ([x:xs], y)
| e == x = True
| e > x = False
| otherwise = memberSort e (xs, y)

insertSort :: a (SortList a) -> SortList a | Ord a
insertSort e ([], y) = ([e], e)
insertSort e ([x:xs], y)
| e <= x = ([e:x:xs], y)
| otherwise = ([x:fst result], snd result)
	where result = insertSort e (xs, y)

removeFirst :: a (SortList a) -> SortList a | Eq, Ord a
removeFirst e ([], y) = y
removeFirst e ([e], e) = newSortList
removeFirst e ([x:xs], y)
| e == x = ([xs], y)
removeFirst _ _ = abort ""

removeAll :: a (SortList a) -> SortList a | Eq, Ord a
removeAll _ _ = abort ""

elements :: (SortList a) -> [a]
elements _ = abort ""

count :: (SortList a) -> Int
count _ = abort ""

minimum :: (SortList a) -> a
minimum _ = abort ""

maximum :: (SortList a) -> a
maximum _ = abort ""

mergeSortList :: (SortList a) (SortList b) -> (SortList a)
mergeSortList _ _ = abort ""

Start :: String
Start = newSortList