Trilhas
/
Wren
Wren
/
Exercícios
/
Operações com Listas
Operações com Listas

Operações com Listas

Médio

Instruções

Implemente operações básicas com listas.

Em linguagens funcionais, operações com listas como length, map e reduce são muito comuns. Implemente uma série de operações básicas com listas, sem usar funções já existentes.

O número e os nomes exatos das operações a serem implementadas vão depender da trilha, para evitar conflitos com nomes já existentes, mas as operações gerais que você vai implementar incluem:

  • append (dadas duas listas, adicione todos os itens da segunda lista ao final da primeira lista);
  • concatenate (dada uma série de listas, combine todos os itens de todas as listas em uma única lista achatada);
  • filter (dados um predicado e uma lista, retorne a lista de todos os itens para os quais predicate(item) é True);
  • length (dada uma lista, retorne o número total de itens dentro dela);
  • map (dadas uma função e uma lista, retorne a lista dos resultados de aplicar function(item) a todos os itens);
  • foldl (dados uma função, uma lista e um acumulador inicial, faça o fold (reduza) de cada item no acumulador, a partir da esquerda);
  • foldr (dados uma função, uma lista e um acumulador inicial, faça o fold (reduza) de cada item no acumulador, a partir da direita);
  • reverse (dada uma lista, retorne uma lista com todos os itens originais, mas em ordem inversa).

Observe que a ordem em que os argumentos são passados para as funções de fold (foldl, foldr) faz diferença.

Implementando operações de List

O objetivo deste exercício é implementar você mesmo alguns dos métodos de List. É natural usar um objeto List no backend para guardar os dados. Não mexa nos métodos de List (como where, map, etc.).

Existem algumas operações "primitivas" de List que são inevitáveis, como:

  • fatiamento: list[from..to]
  • adição: list.add(item)

Protocolo de iterador

As operações de lista que você vai implementar giram em torno de iterar de várias formas. Leia sobre o protocolo de iterador. Aí você vai poder fazer:

var list = ListOps.new([1, 2, 3, 4])
for (item in list) {
    do_something_with(item)
}
Editar via GitHub O link abre em uma nova janela ou aba
Wren Exercism

Tudo pronto para começar Operações com Listas?

Crie sua conta no Exercism para aprender e dominar Wren com 117 exercícios e mentoria humana de verdade, tudo de graça.

Mergulho profundo em Operações com Listas!

Aproveite uma introdução prática à recursão, explore as alternativas imperativas e funcionais para Operações com Listas e mergulhe a fundo na recursão de cauda e nas funções acumuladoras.