Questão 28: (\\)
Voltar
Apresente uma definição recursiva da função (pré-definida) (\) :: Eq a => [a] -> [a] -> [a]
que retorna a lista resultante de remover (as primeiras ocorrências) dos elementos da segunda lista da primeira.
Exemplo
> (\\) [1,2,3,4,5,1] [1,5]
[2,3,4,1]
Resolução
remove :: Eq a => [a] -> [a] -> [a]
remove l [] = l
remove [] _ = []
remove l (h:t) = remove (delete h l) t
Explicação
Nesta definição, a função delete
que definimos na questão anterior pode ser usada aqui, apenas é necessário colocar a sua definição no mesmo ficheiro que esta função.
Alternativamente, visto que a função delete
é uma função pré-definida, é possível usá-la depois de a importar, através da declaração import Data.List (delete)
, colocada no início do ficheiro.