Difference between revisions of "FP Laboratory 10"
Jump to navigation
Jump to search
Line 11: | Line 11: | ||
<div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> | <div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> | ||
<syntaxhighlight lang="Haskell"> | <syntaxhighlight lang="Haskell"> | ||
+ | module Stack(Stack, emptyS, push, pop, top, isEmpty) where | ||
+ | data Stack a = Stack [a] | ||
+ | |||
+ | emptyS :: Stack a | ||
+ | emptyS = Stack [] | ||
+ | |||
+ | push :: a -> Stack a -> Stack a | ||
+ | push x (Stack y) = Stack (x:y) | ||
+ | |||
+ | pop :: Stack a -> Stack a | ||
+ | pop (Stack (_:xs)) = Stack xs | ||
+ | |||
+ | top :: Stack a -> a | ||
+ | top (Stack (x:_)) = x | ||
+ | |||
+ | isEmpty :: Stack a ->Bool | ||
+ | isEmpty (Stack []) = True | ||
+ | isEmpty _ = False | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</div> | </div> |
Revision as of 10:11, 24 September 2020
Abstract data types
- Create an implementation of the abstract data type
Stack
with following functions:
push :: a -> Stack a -> Stack a
pop :: Stack a -> Stack a
top :: Stack a -> a
isEmpty :: Stack a ->Bool
module Stack(Stack, emptyS, push, pop, top, isEmpty) where
data Stack a = Stack [a]
emptyS :: Stack a
emptyS = Stack []
push :: a -> Stack a -> Stack a
push x (Stack y) = Stack (x:y)
pop :: Stack a -> Stack a
pop (Stack (_:xs)) = Stack xs
top :: Stack a -> a
top (Stack (x:_)) = x
isEmpty :: Stack a ->Bool
isEmpty (Stack []) = True
isEmpty _ = False
- Create an implementation of the abstract data type
Queue
with following functions:
isEmpty :: Queue a -> Bool
addQ :: a -> Queue a -> Queue a
remQ :: Queue q -> (a, Queue a)
module Queue(Queue, emptyQ, isEmptyQ, addQ, remQ) where
data Queue a = Qu [a]
emptyQ :: Queue a
emptyQ = Qu []
isEmptyQ :: Queue a -> Bool
isEmptyQ (Qu q) = null q
addQ :: a -> Queue a -> Queue a
addQ x (Qu xs) = Qu (xs++[x])
remQ :: Queue a -> (a,Queue a)
remQ q@(Qu xs) | not (isEmptyQ q) = (head xs, Qu (tail xs))
| otherwise = error "remQ"