Percursos
/
Wren
Wren
/
Exercícios
/
Operações com listas
Operações com listas

Operações com listas

Médio

Instruções

Implementa operações básicas com listas.

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

O número exato e os nomes das operações a implementar variam de track para track, para evitar conflitos com nomes já existentes, mas as operações gerais que vais implementar incluem:

  • append (dadas duas listas, acrescenta todos os itens da segunda lista ao fim da primeira lista);
  • concatenate (dada uma série de listas, combina todos os itens de todas as listas numa única lista achatada);
  • filter (dado um predicado e uma lista, devolve a lista de todos os itens para os quais predicate(item) é True);
  • length (dada uma lista, devolve o número total de itens que ela contém);
  • map (dada uma função e uma lista, devolve a lista dos resultados de aplicar function(item) a todos os itens);
  • foldl (dada uma função, uma lista e um acumulador inicial, aplica fold (reduce) a cada item no acumulador, a partir da esquerda);
  • foldr (dada uma função, uma lista e um acumulador inicial, aplica fold (reduce) a cada item no acumulador, a partir da direita);
  • reverse (dada uma lista, devolve uma lista com todos os itens originais, mas pela ordem inversa).

Repara que a ordem pela qual os argumentos são passados às funções de fold (foldl, foldr) é importante.

Implementar operações de List

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

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

  • fatiar: list[from..to]
  • adicionar: list.add(item)

Protocolo de iterador

As operações de lista que vais implementar têm todas a ver com iterar de várias formas. Lê sobre o protocolo de iterador. Depois, podes fazer o seguinte:

var list = ListOps.new([1, 2, 3, 4])
for (item in list) {
    do_something_with(item)
}
Editar via GitHub A ligação abre numa nova janela ou separador
Wren Exercism

Estás pronto para começar Operações com listas?

Inscreve-te no Exercism para aprenderes e dominares Wren com 117 exercícios, e mentoria humana real, tudo grátis.

Mergulha a fundo em Operações com listas!

Desfruta de uma introdução prática à recursão, explora as alternativas imperativas e funcionais às Operações com listas e mergulha a fundo na recursão de cauda e nas funções acumuladoras.