From a7d7542dc646a5fd124ef71e71ce260889f1701b Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 2 Feb 2016 19:24:50 +0100 Subject: Moved to 1415 directory --- 1415/fp1/week3/mart/StdSortList.dcl | 18 ++++++++++++ 1415/fp1/week3/mart/StdSortList.icl | 50 ++++++++++++++++++++++++++++++++ 1415/fp1/week3/mart/StdStack.dcl | 13 +++++++++ 1415/fp1/week3/mart/StdStack.icl | 57 +++++++++++++++++++++++++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 1415/fp1/week3/mart/StdSortList.dcl create mode 100644 1415/fp1/week3/mart/StdSortList.icl create mode 100644 1415/fp1/week3/mart/StdStack.dcl create mode 100644 1415/fp1/week3/mart/StdStack.icl (limited to '1415/fp1/week3/mart') 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 -- cgit v1.2.3