blob: 759e9158a62937d8247a59ed81cf50ecbeaa8b00 (
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
51
52
53
54
55
56
57
58
59
60
|
implementation module StdSortList
import StdEnv
:: SortList a :== [a]
newSortList :: (SortList a)
newSortList = []
memberSort :: a (SortList a) -> Bool | Eq, Ord a // is element van
memberSort _ [] = False
memberSort m l
| hd l == m = True
| hd l > m = False
| otherwise = memberSort m (tl l)
insertSort :: a (SortList a) -> SortList a | Ord a // voeg element toe
insertSort m l = insertSort` newSortList m l
where
insertSort` :: (SortList a) a (SortList a) -> (SortList a) | Ord a
insertSort` l1 m l2
| count l2 == 0 = l1 ++ [m]
| minimum l2 >= m = l1 ++ [m] ++ l2
| otherwise = insertSort` (l1 ++ [hd l2]) m (tl l2)
removeFirst :: a (SortList a) -> SortList a | Eq, Ord 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 = l1 ++ l2
| minimum l2 == m = l1 ++ tl l2
| otherwise = removeFirst` (l1 ++ [hd l2]) m (tl l2)
removeAll :: a (SortList a) -> SortList a | Eq, Ord 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 = l1 ++ l2
| minimum l2 == m = removeAll` l1 m (tl l2)
| otherwise = removeAll` (l1 ++ [hd l2]) m (tl l2)
elements :: (SortList a) -> [a] // geef alle elementen
elements l = l
count :: (SortList a) -> Int // aantal elementen
count l = length l
minimum :: (SortList a) -> a // huidige minimum waarde
minimum l = hd l
maximum :: (SortList a) -> a // huidige maximum waarde
maximum l = last l
mergeSortList :: (SortList a) (SortList a) -> SortList a | Eq, Ord a // meng gesorteerde lijsten
mergeSortList l1 [] = l1
mergeSortList l1 l2 = mergeSortList (insertSort (hd l2) l1) (tl l2)
|