---------------------------------------------------------------- --Uma matriz pode ser representada por uma lista de listas. -- Faca funcoes para: -- (2.0) inverter (transpor) uma matriz -- inv :: [[a]] -> [[a]] -- (2.0) somar duas matrizes do mesmo tamanho -- soma :: [[Int]] -> [[Int]] -> [[Int]] -- (2.0) retornar uma lista de listas com as colunas de uma matriz -- cols :: [[a]] -> [[a]] data Arv a = No (Arv a) (Arv a) | Folha a deriving (Show) -- sem extender o deriving acima com a classe Eq, -- defina funcoes que -- (2.0) verifique se uma arvore possui -- todas as suas folhas em uma mesma profundidade -- mesmaprof :: Arv a -> Bool -- (2.0) retorne uma lista com -- os elementos da arvore que se encontram na maior profundidade -- da arvore. -- elemprofs :: Arv a -> [a] -- exemplos de Arv: ttarv1 :: Arv Int ttarv1 = No (No (Folha 3) (Folha 4)) (No (Folha 8) (No (Folha 9) (Folha 10)) ) ttarv2 :: Arv Int ttarv2 = No (No (Folha 1) (No (Folha 2) (Folha 3)) ) (No (No (Folha 9) (Folha 10)) (Folha 12) ) ttarv3 :: Arv Int ttarv3 = No (No (No (Folha 2) (Folha 3)) (No (Folha 5) (Folha 6)) ) (No (No (Folha 9) (Folha 10)) (No (Folha 19) (Folha 20)) ) ttarv4 :: Arv Int ttarv4 = No (No (No (Folha 2) (No (Folha 3) (Folha 4))) (No (No (Folha 5) (Folha 6)) (No (Folha 7) (Folha 8))) ) (No (No (No (Folha 9) (Folha 10)) (No (Folha 11) (Folha 12))) (No (Folha 13) (No (Folha 14) (Folha 15))) ) mat1 :: [[Int]] mat1 = [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]] mat2 :: [[Int]] mat2 = [[1,2,3], [5,6,7], [9,10,11], [13,14,15]]