Free Palestine and Lebanon 🍉 Stop the Genocide
Haskell Logo

Programação Funcional

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

Clica para revelar

tails :: [a] -> [[a]]
tails [] = [[]]
tails l = l : tails (tail l)

Explicação

Clica para revelar

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.