Difference between revisions of "FP Laboratory 10"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
== Abstract data types == | == Abstract data types == | ||
− | * Create an abstract data type <code>Stack</code> with following functions: | + | * Create an implementation of the abstract data type <code>Stack</code> with following functions: |
<syntaxhighlight lang="Haskell"> | <syntaxhighlight lang="Haskell"> | ||
push :: a -> Stack a -> Stack a | push :: a -> Stack a -> Stack a | ||
Line 15: | Line 15: | ||
<div style="clear:both"></div> | <div style="clear:both"></div> | ||
− | * Create an abstract data type <code>Queue</code> with following functions: | + | * Create an implementation of the abstract data type <code>Queue</code> with following functions: |
<syntaxhighlight lang="Haskell"> | <syntaxhighlight lang="Haskell"> | ||
isEmpty :: Queue a -> Bool | isEmpty :: Queue a -> Bool |
Revision as of 10:06, 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
- 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"