Trilhas
/
Bash
Bash
/
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.

Biblioteca de funções

Este é o primeiro exercício que vemos em que a solução que estamos escrevendo não é um script "main". Estamos escrevendo uma biblioteca para ser carregada com "source" em outros scripts que vão chamar nossas funções.

Namerefs do Bash

Este exercício exige o uso de variáveis nameref. Isso requer uma versão do bash pelo menos 4.0. Se você estiver usando o bash padrão no MacOS, vai precisar instalar outra versão: veja Instalando o Bash

Namerefs são uma forma de passar uma variável para uma função por referência. Assim, a variável pode ser modificada dentro da função e o valor atualizado fica disponível no escopo que fez a chamada. Veja um exemplo:

prependElements() {
    local -n __array=$1
    shift
    __array=( "$@" "${__array[@]}" )
}

my_array=( a b c )
echo "before: ${my_array[*]}"    # => before: a b c

prependElements my_array d e f
echo "after: ${my_array[*]}"     # => after: d e f a b c
Editar via GitHub O link abre em uma nova janela ou aba
Bash Exercism

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

Crie sua conta no Exercism para aprender e dominar Bash com 97 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.