Questão 7: Escreva uma função recursiva em Haskell que receba uma lista de inteiros e retorne True se houver algum número ímpar na lista, e False contrário.
Passo 1
O enunciado pede uma função recursiva em Haskell que receba uma lista de inteiros e devolva True se houver pelo menos um número ímpar, e False caso contrário. Para resolver isso vamos usar recursão com pattern matching e um teste de paridade.
Passo 2
Definimos o caso base: quando a lista é vazia (
), não há nenhum elemento para testar, então retornamos False.
Passo 3
Para o caso recursivo vamos desmembrar a lista em cabeça e cauda (
). Primeiro testamos se
é ímpar usando a função
. Se for, já podemos devolver True; caso contrário, chamamos recursivamente a mesma função sobre
.
Passo 4
Usamos o operador lógico
para fazer o short-circuit: se
for True, não precisa avaliar o resto; senão, segue a recursão em
.
Resposta
anyOdd :: [Int] -> Bool
anyOdd [] = False
anyOdd (x:xs)
| odd x = True
| otherwise = anyOdd xs
anyOdd [] = False
anyOdd (x:xs)
| odd x = True
| otherwise = anyOdd xs