Questão 4: Escreva uma função recursiva em Haskell que receba um número inteiro
e uma lista
de números inteiros e retorne True se
estiver em
, 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.
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:
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