From 2d198cfd6fb4af45ebcdf3906d61975c6cfd4ffd Mon Sep 17 00:00:00 2001 From: FP10 Uebungsteilnehmer 0726236 Date: Tue, 9 Nov 2010 14:21:59 +0100 Subject: [PATCH] Aufg 4 jan --- Aufgabe4.hs | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 Aufgabe4.hs diff --git a/Aufgabe4.hs b/Aufgabe4.hs new file mode 100755 index 0000000..2a13657 --- /dev/null +++ b/Aufgabe4.hs @@ -0,0 +1,72 @@ +import Prelude hiding (Ord) +import List + +--Aufg 4.1a +data Tree = Leaf Integer | Node Integer Tree Tree +type Layer = [Integer] + +-- Ord datatype + show + compare +data Ord = BottomUp | TopDown + +instance Show Ord where + showsPrec p (BottomUp) = showString "BottomUp" + showsPrec p (TopDown) = showString "TopDown" + +instance Main.Eq Ord where + a == b = show a == show b + +-- Die eigentliche aufgabe +writeLayer :: Tree -> Ord -> [Layer] +writeLayer (Leaf x) o = [[x]] +writeLayer (Node x l r) o | (o == BottomUp) = (mmerge (writeLayer l o) (writeLayer r o)) ++ [[x]] +writeLayer (Node x l r) o | (o == TopDown) = [[x]] ++ (mmerge (writeLayer l o) (writeLayer r o)) + +mmerge :: [[Integer]] -> [[Integer]] -> [[Integer]] +mmerge x y = [x!!index ++ y!!index | index <- [0..(min (length x) (length y))-1]] + + + +--Aufg 4.1b +data STree = Nil | SNode Integer STree STree deriving Show + +transform :: Tree -> STree +--transform :: Tree -> [Integer] +transform t = toStree (sort (undup (concat (writeLayer t BottomUp)))) + +undup :: [Integer] -> [Integer] +undup [] = [] +undup (x:xs) = x : undup (filter (\y -> not (x == y)) xs) + +toStree :: [Integer] -> STree +toStree [] = Nil +toStree (x:xs) = SNode x Nil (toStree xs) + + + +--Aufg 4.2 +type Cost = Integer +type Vertex = Integer +newtype Graph = Graph [(Vertex,[(Vertex,Cost)])] + +instance Show Graph where + showsPrec p (Graph(x)) = showString "Graph(" . shows x . showChar ')' + +-- Aufg 4.2a +data Result = Yes | No | Invalid +instance Show Result where + showsPrec p (Yes) = showString "Yes" + showsPrec p (No) = showString "No" + showsPrec p (Invalid) = showString "Invalid" + +instance Main.Eq Result where + a == b = show a == show b + + +--path :: Graph -> Vertex -> Vertex -> Cost -> Result +--path _ _ _ _ = Invalid + + + +--Aufg 4.2b +--minpath :: Graph -> Vertex -> Vertex -> ([Vertex],Cost) +--minpath _ _ _ _ = ([],1337) -- 2.43.0