Questão 1: Escreva uma função em Haskell que receba uma matriz (representada como lista de listas) e retorne sua respectiva matriz transposta.

Passo 1

Vamos criar uma função em Haskell que receba uma matriz (lista de listas) e devolva a matriz transposta — ou seja, transforme linhas em colunas. Para isso, precisamos entender que a primeira coluna da matriz original vira a primeira linha da nova, a segunda coluna vira a segunda linha e assim por diante.

Passo 2

O truque é usar recursão. A cada passo, extraímos a cabeça de cada lista (row) para formar a primeira linha da transposta, usando map head. Depois, preparamos o restante da matriz original sem esses primeiros elementos, usando map tail, e aplicamos a transposição de novo.

Passo 3

Precisamos tratar casos-base: se a matriz é vazia ([]), não há nada a transpor. Se a matriz não é vazia mas sua primeira linha é vazia ([]: _), significa que todas as linhas já foram “consumidas” e não há mais colunas a transpor — retornamos [].

Passo 4

Com isso definido, escrevemos a assinatura de tipo e os padrões de correspondência, juntando tudo na função transpose. A implementação final aproveita map head e map tail e faz a chamada recursiva.

Resposta

transpose :: [[a]] -> [[a]]
transpose [] = []
transpose ([]:_) = []
transpose x = map head x : transpose (map tail x)

Exercícios relacionados