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

Exercícios relacionados