Questão 4: Escreva uma função recursiva em Haskell que receba um número inteiro a e uma lista p de números inteiros e retorne True se a estiver em p, e False caso contrário. Atenção: não é permitido o uso da função element.

Passo 1

O exercício pede uma função recursiva em Haskell que receba um inteiro a e uma lista p de inteiros e retorne True se a estiver em p e False caso contrário. O conteúdo principal aqui é recursão em listas, usando pattern matching e comparação de valores.

Passo 2

Precisamos definir o caso base: quando a lista é vazia (i.e., []), não há nenhum elemento para comparar. Logo, a função deve retornar False imediatamente.
Para o caso indutivo, suponha que a lista tenha a forma (x:xs). Primeiro comparamos x com a. Se forem iguais, já podemos retornar True. Caso contrário, precisamos continuar a busca chamando recursivamente a função sobre a cauda xs.

Passo 3

Com base nisso, escrevemos a assinatura e a definição usando pattern matching e guardas em Haskell. A assinatura indica que a função recebe um Int e uma lista de Int e devolve um Bool.
O código completo fica assim:
pertence :: Int -> [Int] -> Bool
pertence a [] = False
pertence a (x:xs)
  | x == a    = True
  | otherwise = pertence a xs

Resposta

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

Exercícios relacionados