Questão 14: tails
Voltar
Apresente uma definição recursiva da função (pré-definida) tails :: [a] -> [[a]] que calcula a lista dos sufixos de uma lista.
Exemplo
> tails [1,2,3]
[[1,2,3],[2,3],[3],[]] Resolução
tails :: [a] -> [[a]]
tails [] = [[]]
tails l = l : tails (tail l) Explicação
Tal como na questão anterior, nesta usamos a função pré-definida tail, que devolve a cauda de uma lista, isto é, a lista sem o primeiro elemento, de forma recursiva.
Obtemos assim a seguinte função:
tails :: [a] -> [[a]]
tails [] = [[]]
tails l = l : tails (tail l)Como podemos ver, é praticamente igual à função inits. A única diferença, para além do nome das funções, é que aqui colocamos a própria lista à esquerda do resto do resultado, em vez de colocar à direita, de modo a que as sub-listas do resultado sejam progressivamente mais pequenas.