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 ( x:xs). Primeiro testamos se x é ímpar usando a função odd. Se for, já podemos devolver True; caso contrário, chamamos recursivamente a mesma função sobre xs.

Passo 4

Usamos o operador lógico || para fazer o short-circuit: se odd x for True, não precisa avaliar o resto; senão, segue a recursão em xs.

Resposta

anyOdd :: [Int] -> Bool
anyOdd [] = False
anyOdd (x:xs)
| odd x = True
| otherwise = anyOdd xs

Exercícios relacionados