Questão 2: Escreva uma função recursiva em Haskell que receba uma lista de números Float e retorne o produtório dos elementos da lista. Atenção: você não pode utilizar a função product.
Passo 1
O enunciado pede uma função recursiva em Haskell que receba uma lista de números Float e retorne o produtório (produto acumulado) dos elementos, sem usar a função pronta product. Para isso vamos usar conceitos básicos de recursão, com caso base e passo recursivo.
Passo 2
Primeiro, identificamos o caso base: quando a lista está vazia não há números a multiplicar, então o produtório deve ser igual ao elemento neutro da multiplicação, que em álgebra é 1.
Passo 3
Agora, no passo recursivo tratamos uma lista não vazia. Se a lista é (x:xs), extraímos o primeiro elemento x e dizemos que o produtório de toda a lista é x multiplicado pelo produtório recursivo de xs.
Passo 4
Com esses dois casos em mente, escrevemos a assinatura da função para deixar claro seu tipo em Haskell:
Implementamos então a função completa em Haskell usando pattern matching:
Passo 5
Podemos testar mentalmente: para produtorio [2.0,3.5,4.0] o cálculo é 2.0 * produtorio [3.5,4.0], depois 3.5 * produtorio [4.0], e por fim 4.0 * produtorio [], que é 4.0 * 1 = 4.0. Voltando, fica 3.5 * 4.0 = 14.0 e depois 2.0 * 14.0 = 28.0, como esperado.
Resposta
produtorio :: [Float] -> Float
produtorio [] = 1
produtorio (x:xs) = x * produtorio xs
produtorio [] = 1
produtorio (x:xs) = x * produtorio xs