Difference between revisions of "FP Laboratory 10"
Jump to navigation
Jump to search
| Line 8: | Line 8: | ||
isEmpty :: Stack a ->Bool | isEmpty :: Stack a ->Bool | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| + | <div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> | ||
| + | <syntaxhighlight lang="Haskell"> | ||
| + | </syntaxhighlight> | ||
| + | </div> | ||
| + | <div style="clear:both"></div> | ||
| + | |||
* Create an abstract data type <code>Queue</code> with following functions: | * Create an abstract data type <code>Queue</code> with following functions: | ||
<syntaxhighlight lang="Haskell"> | <syntaxhighlight lang="Haskell"> | ||
| Line 14: | Line 21: | ||
remQ :: Queue q -> (a, Queue a) | remQ :: Queue q -> (a, Queue a) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| + | <div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> | ||
| + | <syntaxhighlight lang="Haskell"> | ||
| + | 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" | ||
| + | </syntaxhighlight> | ||
| + | </div> | ||
| + | <div style="clear:both"></div> | ||
Revision as of 10:05, 24 September 2020
Abstract data types
- Create an abstract data type
Stackwith following functions:
push :: a -> Stack a -> Stack a
pop :: Stack a -> Stack a
top :: Stack a -> a
isEmpty :: Stack a ->Bool
- Create an abstract data type
Queuewith 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"