Files
tilman.de/www/uni/ws03/alp/algebraischeSpez2.txt
2011-10-26 10:11:42 +02:00

162 lines
4.2 KiB
Plaintext

1a. alg. Menge (Haskell data)
2a. alg. Queue (Haskell data)
3a. alg. Stack (Haskell data)
4a. alg. Baum (Haskell data)
1a. Algebraische Spezifikation einer Menge (types,operators,axioms)
---------------------------------------------------------------------------------------------------
types : Menge m,m,Bool //Menge,element,Bool
data Menge m = E | (In m (Menge m)) //Empty | Menge mit e
operators : createM :: Menge m
isEmpty :: Menge m -> Bool
insert :: m -> Menge m -> Menge m
delete :: m -> Menge m -> Menge m
isIn :: m -> Menge m -> Bool
Alle x <- m , s <- Menge m
axioms : createM () = E
isEmpty (E) = True
isEmpty (insert x s) = False
insert (x,E) = (In x E) //x:E
insert (x,s)
| isIn (x,s) = s
| otherwise = (In x s) //x:M
delete (x,E) = E
delete (y,(In x m))
|y == x = m
|otherwise = Insert x (delete (y,m))
isIn (x,E) = False
isIn (y,(In x m))
|y == x = True
|otherwise = isIn (y,m)
2a. Algebraische Spezifikation einer Schlange (types,operators,axioms)
---------------------------------------------------------------------------------------------------
types : Queue q,q,Bool //Schlange,element,Bool
data Queue q = E | NeQ q (Queue q) //Empty | Queue mit elem
operators : createQ :: Queue q
isEmpty :: Queue q -> Bool
enqueue :: q -> Queue q -> Queue q
dequeue :: Queue q -> Queue q
first :: Queue q -> q
Alle x <- q, s <- Queue q
axioms : createQ () = E
isEmpty (E) = True
isEmpty (s) = False
enqueue (x,s) = (NeQ x s)
dequeue (NeQ x s) = s
first (NeQ x s) = x
3a. Algebraische Spezifikation eines Stacks (types,operators,axioms)
---------------------------------------------------------------------------------------------------
types Stack,e,Bool,int
data Stack s = E | NeS e (Stack s)
operators : createS :: Stack s
isEmpty :: Stack s -> Bool
push :: e -> Stack s -> Stack s
pop :: Stack s -> Stack s
top :: Stack s -> e
size :: Stack s -> int
axioms : create () = E
isEmpty (E) = True
isEmpty (NeS x s) = False
push (x,s) = (NeS x s)
pop (E) = error "Stack ist leer!"
pop (NeS x s) = s
top (E) = error "Stack ist leer!"
top (NeS x s) = x
size (E) = 0
size (NeS x s) = 1 + size(s)
4a. Algebraische Spezifikation eines Baumes (types,operators,axioms)
---------------------------------------------------------------------------------------------------
types BTree,n,Bool,int
data BTree t = E | N (BTree t) t (BTree t)
operators : insert :: n -> BTree t -> BTree t
delete :: n -> BTree t -> BTree t
hoehe :: BTree t -> int
isIn :: t -> BTree t -> Bool
isEmpty :: BTree t -> Bool
leftTree :: BTree t -> BTree t
rightTree :: BTree t -> BTree t
axioms : insert x E = (N E x E)
insert x (N l v r)
| x == v = (N l x r)
| x < v = (N (insert x l) v r)
| x > v = (N l v (insert x r))
delete :: (Ord t) => t -> BTree t -> BTree t
delete x E = error "ist bereits leer"
delete y (N E x E)
| y == x = E
| otherwise = (N E x E)
delete y (N l x r)
| y < x = (N (delete y l) x r)
| y > x = (N l x (delete y r))
| (l==E)&&(x==y)= r
| (r==E)&&(x==y)= l
| y == x = (N (delete (maxi l) l)(maxi l) r)
where max :: BTree t -> t
max (N E x E) = x
max (N l v r) = max l
hoehe E = 0
hoehe (N E x E) = 1
hoehe (N l v r) = 1 + max (hoehe l)(hoehe r)
where max :: int -> int
max x y
| x <= y = y
|otherwise = x
isIn x E = False
isIn x (N l v r)
| x == v = True
| otherwise = (isIn x l) || (isIn x r)
isEmpty E = True
isEmpty t = False
leftTree E = error "alles Leer -> links auch"
leftTree (N l v r) = l
rightTree E = error "alles Leer -> rechts auch"
rightTree (N l v r) = r