summaryrefslogtreecommitdiff
path: root/1415/fp1/week3/mart
diff options
context:
space:
mode:
Diffstat (limited to '1415/fp1/week3/mart')
-rw-r--r--1415/fp1/week3/mart/StdSortList.dcl18
-rw-r--r--1415/fp1/week3/mart/StdSortList.icl50
-rw-r--r--1415/fp1/week3/mart/StdStack.dcl13
-rw-r--r--1415/fp1/week3/mart/StdStack.icl57
4 files changed, 138 insertions, 0 deletions
diff --git a/1415/fp1/week3/mart/StdSortList.dcl b/1415/fp1/week3/mart/StdSortList.dcl
new file mode 100644
index 0000000..46bd238
--- /dev/null
+++ b/1415/fp1/week3/mart/StdSortList.dcl
@@ -0,0 +1,18 @@
+definition module StdSortList
+
+import StdClass
+
+:: SortList a
+
+newSortList :: SortList a // lege gesorteerde lijst
+memberSort :: a (SortList a) -> Bool | Eq, Ord a // is element van
+insertSort :: a (SortList a) -> SortList a | Ord a // voeg element toe
+removeFirst :: a (SortList a) -> SortList a | Eq, Ord a // verwijder eerste voorkomen
+removeAll :: a (SortList a) -> SortList a | Eq, Ord a // verwijder alle voorkomens
+elements :: (SortList a) -> [a] // geef alle elementen
+count :: (SortList a) -> Int // aantal elementen
+
+minimum :: (SortList a) -> a // huidige minimum waarde
+maximum :: (SortList a) -> a // huidige maximum waarde
+
+mergeSortList :: (SortList a) (SortList a) -> SortList a | Eq, Ord a // meng gesorteerde lijsten
diff --git a/1415/fp1/week3/mart/StdSortList.icl b/1415/fp1/week3/mart/StdSortList.icl
new file mode 100644
index 0000000..db71a36
--- /dev/null
+++ b/1415/fp1/week3/mart/StdSortList.icl
@@ -0,0 +1,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
diff --git a/1415/fp1/week3/mart/StdStack.dcl b/1415/fp1/week3/mart/StdStack.dcl
new file mode 100644
index 0000000..8c861a1
--- /dev/null
+++ b/1415/fp1/week3/mart/StdStack.dcl
@@ -0,0 +1,13 @@
+definition module StdStack
+
+:: Stack a
+
+newStack :: Stack a // lege stack
+push :: a (Stack a) -> Stack a // plaats nieuw element bovenop de stack
+pushes :: [a] (Stack a) -> Stack a // plaats elementen achtereenvolgens bovenop stack
+pop :: (Stack a) -> Stack a // haal top element van stack
+popn :: Int (Stack a) -> Stack a // haal bovenste $n$ top elementen van stack
+top :: (Stack a) -> a // geef top element van stack
+topn :: Int (Stack a) -> [a] // geef bovenste $n$ top elementen van stack
+elements :: (Stack a) -> [a] // geef alle elementen van stack
+count :: (Stack a) -> Int // tel aantal elementen in stack
diff --git a/1415/fp1/week3/mart/StdStack.icl b/1415/fp1/week3/mart/StdStack.icl
new file mode 100644
index 0000000..13220e1
--- /dev/null
+++ b/1415/fp1/week3/mart/StdStack.icl
@@ -0,0 +1,57 @@
+implementation module StdStack
+
+import StdEnv
+
+:: Stack a = Stack [a]
+
+newStack :: Stack a
+newStack = Stack []
+
+push :: a (Stack a) -> Stack a
+push x (Stack xs) = Stack [x:xs]
+
+pushes :: [a] (Stack a) -> Stack a
+pushes [] (Stack s) = Stack s
+pushes [x:xs] (Stack s) = pushes xs (push x (Stack s))
+
+pop :: (Stack a) -> Stack a
+pop (Stack []) = abort "Can't pop from empty stack..."
+pop (Stack [x:xs]) = Stack xs
+
+popn :: Int (Stack a) -> Stack a
+popn 0 s = s
+popn n s = popn (n-1) (pop s)
+
+top :: (Stack a) -> a
+top (Stack []) = abort "Can't give top of empty stack..."
+top (Stack [x:_]) = x
+
+topn :: Int (Stack a) -> [a]
+topn 0 _ = []
+topn n x = [top x:topn (n-1) (pop x)]
+
+elements :: (Stack a) -> [a]
+elements (Stack s) = s
+
+count :: (Stack a) -> Int
+count (Stack []) = 0
+count (Stack [_:xs]) = 1 + count (Stack xs)
+
+Start = ( "s0 = newStack = ", s0,'\n'
+ , "s1 = push 1 s0 = ", s1,'\n'
+ , "s2 = pushes [2..5] s1 = ",s2,'\n'
+ , "s3 = pop s2 = ", s3,'\n'
+ , "s4 = popn 3 s3 = ", s4,'\n'
+ , "s5 = top s4 = ", s5,'\n'
+ , "s6 = topn 3 s2 = ", s6,'\n'
+ , "s7 = elements s2 = ", s7,'\n'
+ )
+where
+ s0 = newStack
+ s1 = push 1 s0
+ s2 = pushes [2..5] s1
+ s3 = pop s2
+ s4 = popn 3 s3
+ s5 = top s4
+ s6 = topn 3 s2
+ s7 = elements s2