Questão 25: elemIndices
Voltar
Apresente uma definição recursiva da função (pré-definida) elemIndices :: Eq a => a -> [a] -> [Int]
que calcula a lista de posições em que um dado elemento ocorre numa lista.
Exemplo
> elemIndices 3 [1,2,3,4,3,2,3,4,5]
[2,4,6]
Resolução
elemIndices :: Eq a => a -> [a] -> [Int]
elemIndices x l = elemIndicesAux x l 0
elemIndicesAux :: Eq a => a -> [a] -> Int -> [Int]
elemIndicesAux _ [] _ = []
elemIndicesAux x (h:t) i -- a variável `i` indica-nos qual o índice do elemento da lista que estamos a consultar
| x == h = i : elemIndicesAux x t (i+1)
| otherwise = elemIndicesAux x t (i+1)
Resolução
elemIndices :: Eq a => a -> [a] -> [Int]
elemIndices _ [] = []
elemIndices x (h:t)
| x == h = 0 : map (+1) (elemIndices x t)
| otherwise = map (+1) (elemIndices x t)