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
.
Em uma matriz de tamanho , a diagonal secundária engloba os elementos nas posições
para
. Ou seja, na linha de índice
escolhemos a coluna de índice
.
Em uma matriz de tamanho
Passo 2
Para cada linha
com índice
, podemos extrair o elemento da diagonal secundária usando
, onde
.
Depois de obter todos os elementos da diagonal secundária em uma lista, aplicamos a função para calcular o produtório dessa lista.
Finalmente, podemos implementar a função em Haskell usando uma compreensão de listas ou . A assinatura deve restringir os elementos a uma classe
.
Depois de obter todos os elementos da diagonal secundária em uma lista, aplicamos a função
Finalmente, podemos implementar a função em Haskell usando uma compreensão de listas ou
Resposta
diagonalSec :: Num a => [[a]] -> a
diagonalSec mat =
let n = length mat
in product [ row !! (n - 1 - i) | (row, i) <- zip mat [0…] ]
diagonalSec mat =
let n = length mat
in product [ row !! (n - 1 - i) | (row, i) <- zip mat [0…] ]