hw #2, done
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Tue, 16 Dec 2014 06:12:50 +0000 (11:42 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Tue, 16 Dec 2014 06:12:50 +0000 (11:42 +0530)
hw2/LogAnalysis.hs

index dc393b25339c26bbabda6c1d76c2753b5ecc186d..d494a25a391f8853572caff093c932dda4db6632 100644 (file)
@@ -15,4 +15,29 @@ parseMessage s = let ws = words s in
 parse :: String -> [LogMessage]
 parse s = map parseMessage (lines s)
 
+-- Exercise 2
+insert :: LogMessage -> MessageTree -> MessageTree
+insert (LogMessage t ts s) (Leaf) = Node Leaf (LogMessage t ts s) Leaf
+insert (LogMessage t1 ts1 s1) (Node lt (LogMessage t2 ts2 s2) rt) | ts1 <= ts2 = Node (insert (LogMessage t1 ts1 s1) lt) (LogMessage t2 ts2 s2) rt
+                                                                  | otherwise = Node lt (LogMessage t2 ts2 s2) (insert (LogMessage t1 ts1 s1) rt)
+insert _ tree = tree
 
+-- Exercise 3
+build :: [LogMessage] -> MessageTree
+build = foldr (\msg t -> insert msg t) Leaf
+
+-- Exercise 4
+inOrder :: MessageTree -> [LogMessage]
+inOrder (Leaf) = []
+inOrder (Node lt rootmsg rt) = inOrder lt ++ [rootmsg] ++ inOrder rt
+
+-- Exercise 5
+whatWentWrong :: [LogMessage] -> [String]
+whatWentWrong ls = let sortedLogMsgs = inOrder (build ls)
+                   in
+                     filterErrorMessages (>= 50) sortedLogMsgs
+                         where
+                           filterErrorMessages _ [] = [""]
+                           filterErrorMessages f ((LogMessage (Error level) _ s):ms) | f level = s: filterErrorMessages f ms
+                                                                                      | otherwise = filterErrorMessages f ms
+                           filterErrorMessages f (_:ms) = filterErrorMessages f ms