Bladeren bron

other work on trees

andreagus 9 jaren geleden
bovenliggende
commit
88183cb4fd
1 gewijzigde bestanden met toevoegingen van 38 en 1 verwijderingen
  1. 38 1
      haskell/haskell2.hs

+ 38 - 1
haskell/haskell2.hs

@@ -75,5 +75,42 @@ treeMap f (Node a left right) = Node (f a) (treeMap f left) (treeMap f right)
 
 -- defin the foldl function for a tree
 treeFoldl :: (a -> b -> a) -> a -> Tree b -> a
-treeFoldl f z EmptyTree = z
+treeFoldl _ z EmptyTree = z
 treeFoldl f z (Node a left right) = treeFoldl f (f (treeFoldl f z left) a) right
+
+-- define the foldr function on a tree
+
+treeFoldr :: (b -> a -> a) -> a -> Tree b -> a
+treeFoldr _ z EmptyTree = z
+treeFoldr f z (Node a left right) = treeFoldr f (f a (treeFoldr f z right)) left
+
+-- define a filter function on the tree
+
+treeFilter :: (a -> Bool) -> Tree a -> [a]
+treeFilter f = treeFoldr (\x acc -> if f x then x:acc else acc) []
+
+-- define the sumTree using treeFoldr
+
+treeSum2 :: (Num a) => Tree a -> a
+treeSum2 = treeFoldr (+) 0 
+
+--define a the treeValues function on a tree using the treeFoldr
+
+treeValues3 :: Tree a -> [a]
+treeValues3 = treeFoldr (:) []
+
+--define the treeValues unction using the treeFoldl function
+
+treeValues4 :: Tree a -> [a]
+treeValues4 t = treeFoldl (++) [] (treeMap (:[]) t)
+
+--define a TrafficLight datatype implementing the equality operations and introducing a (partial) order
+
+data TrafficLight = Red | Yellow | Green
+
+instance Eq TrafficLight where
+        Red == red = True
+        Yellow == Yellow = True
+        Green == Green = True
+        _ == _ = False
+