Questão 5: Escreva uma função em Haskell que receba uma matriz quadrada (representada como lista de listas) e retorne o produtório dos elementos da diagonal secundária.

Passo 1

A questão pede uma função em Haskell que, dado uma matriz quadrada (lista de listas), calcule o produtório dos elementos da diagonal secundária. O conteúdo envolve programação funcional e manipulação de listas em Haskell, usando índices e a função product.
Em uma matriz de tamanho n, a diagonal secundária engloba os elementos nas posições (i, n-1-i) para i=0,1,dots,n-1. Ou seja, na linha de índice i escolhemos a coluna de índice n-1-i.

Passo 2

Para cada linha row com índice i, podemos extrair o elemento da diagonal secundária usando row !! (n-1-i), onde n = <=n>h mat.
Depois de obter todos os elementos da diagonal secundária em uma lista, aplicamos a função product para calcular o produtório dessa lista.
Finalmente, podemos implementar a função em Haskell usando uma compreensão de listas ou zipWith. A assinatura deve restringir os elementos a uma classe Num.

Resposta

diagonalSec :: Num a => [[a]] -> a
diagonalSec mat =
let n = length mat
in product [ row !! (n - 1 - i) | (row, i) <- zip mat [0…] ]

Exercícios relacionados