Recursão da Data.List Ilustrada

– http://colah.github.io/posts/2015-02-DataList-Illustrated/
Postado em 12 de fevereiro de 2015
programação funcional, Haskell, visualização

Data.List é uma biblioteca Haskell padrão. Fornece muitas funções realmente úteis para trabalhar com listas.
Em particular, Data.List fornece funções para padrões específicos de recursão em listas. Alguns deles, como o mapa, são familiares para muitos programadores. Mas há muitas variações sutis, e é difícil mantê-las retas.
O objetivo desta postagem no blog é fornecer uma referência conveniente para entender rapidamente todas essas funções diferentes, com algumas fotos bonitas.
Dobras
As dobras combinam todos os elementos de uma lista em um único valor. Por exemplo, se você deseja adicionar todos os elementos de uma lista, pode dobrar a função de adição sobre a lista.
Há duas escolhas que uma pessoa precisa fazer ao fazer uma dobra:
– Devo começar pelo lado direito ou no lado esquerdo?
– Eu tenho um valor inicial? (Por exemplo, se eu estiver a adicionar os números numa lista, posso começar com zero e adicionar cada novo valor.)
Existem quatro versões de dobras, correspondentes a cada par de escolhas.

Scans
Scans são uma espécie de dobras com história. À medida que combinam os elementos da lista de entrada, eles se lembram de cada passo intermediário e produzem uma lista desses.
Há um scan correspondente a cada versão de dobra.

Mapas
Os mapas visualizam cada elemento de uma lista e produzem uma saída correspondente.
A função básica do mapa apenas analisa o elemento da lista, mas também acumulando mapas que obtêm informações da esquerda ou da direita.

Os mapas de acumulação são um pouco elegantes porque contêm muitas outras funções. Por exemplo, se você deixar b=(), você obtém um mapa regular. E se você deixar c=(), você recebe foldr/foldl. Finalmente, se você deixar a=(), você obtém algo muito próximo de se desdobrar da seção seguinte.
Desdobra
Onde as dobras tomam uma lista e produzem um único valor, a desdobra toma um único valor e produz uma lista.
Data.List só fornece unfoldr. Chama-se unfolder porque é o dupla do foldr, mesmo que ele comece na esquerda.

Sobre o autor

Sara Filipa

Comentar

Posts recentes

Comentários

Arquivos

Categorias

Meta