Free Palestine and Lebanon 🍉 Stop the Genocide
Haskell Logo

Programação Funcional

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

Clica para revelar

remove :: Eq a => [a] -> [a] -> [a]
remove l [] = l
remove [] _ = []
remove l (h:t) = remove (delete h l) t

Explicação

Clica para revelar

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.