{- Pregunta 2 ========== -} data Arbol a = Bin (Arbol a) (Arbol a) | Tip a -- a) crush :: (a -> a -> a) -> Arbol a -> a crush op (Tip x) = x crush op (Bin izq der) = op (crush op izq) (crush op der) -- min :: Ord a => a -> a -> a -- min x y = if x <= y then x else y -- b) minElem :: Ord a => Arbol a -> a minElem = crush min -- c) izquierdista :: Arbol Integer -> Bool izquierdista (Tip x) = True izquierdista (Bin x y) = (<=) (crush (+) x) (crush (+) y) -- Tambien vale -- izquierdista (Bin x y) = (crush (+) x) <= (crush (+) y) -- c) alternativo suma :: Num a => Arbol a -> a suma = crush (+) izquierdista_alt :: Arbol Integer -> Bool izquierdista_alt (Tip x) = True izquierdista_alt (Bin x y) = (<=) (suma x) (suma y) -- Tambien vale -- izquierdista_alt (Bin x y) = (suma x) <= (suma y)