As listas são nativas da linguagem Elixir. Elas são consideradas um tipo básico, representado por colchetes. As listas podem estar vazias ou conter qualquer número de itens de qualquer tipo. Por exemplo:
empty_list = []
one_item_list = [1]
two_item_list = [1, 2]
multiple_type_list = [1, :pi, 3.14, "four"]
O Elixir implementa listas como uma lista encadeada, em que cada nó armazena dois valores: o primeiro item e outra lista com todos os itens restantes. O primeiro item da lista é chamado de cabeça e a lista restante de itens é chamada de cauda. Podemos usar essa notação no código:
# [1] represented in [head | tail] notation
[1 | []]
# [1, 2, 3] represented in [head | tail] notation
[1 | [2 | [3 | []]]]
Podemos usar a notação [head | tail] para adicionar elementos ao início de uma lista:
# Suppose
list = [2, 1]
[3, 2, 1] == [3 | list]
# => true
Há várias funções no módulo Kernel para trabalhar com listas, assim como todo o módulo List.
# Check if 1 is a member of the list
1 in [1, 2, 3, 4]
# => true
Neste exercício, você precisa implementar algumas funções para manipular uma lista de linguagens de programação.
Defina a função new/0, que não recebe argumentos e retorna uma lista vazia.
LanguageList.new()
# => []
Defina a função add/2, que recebe 2 argumentos (uma lista de linguagens e um literal de string de uma linguagem). Ela deve retornar a lista resultante com a nova linguagem adicionada no início da lista recebida.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
Defina a função remove/1, que recebe 1 argumento (uma lista de linguagens). Ela deve retornar a lista sem o primeiro item. Considere que a lista sempre terá pelo menos um item.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
language_list = LanguageList.remove(language_list)
# => ["Clojure"]
Defina a função first/1, que recebe 1 argumento (uma lista de linguagens). Ela deve retornar a primeira linguagem da lista. Considere que a lista sempre terá pelo menos um item.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elm")
# => ["Elm"]
language_list = LanguageList.add(language_list, "Prolog")
# => ["Prolog", "Elm"]
LanguageList.first(language_list)
# => "Prolog"
Defina a função count/1, que recebe 1 argumento (uma lista de linguagens). Ela deve retornar o número de linguagens na lista.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elm")
# => ["Elm"]
language_list = LanguageList.add(language_list, "Prolog")
# => ["Prolog", "Elm"]
LanguageList.count(language_list)
# => 2
Defina a função functional_list?/1, que recebe 1 argumento (uma lista de linguagens). Ela deve retornar um valor Boolean. Ela deve retornar true se "Elixir" for uma das linguagens da lista.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elixir")
# => ["Elixir"]
LanguageList.functional_list?(language_list)
# => true
Crie sua conta no Exercism para aprender e dominar Elixir com 58 conceitos168 exercícios e mentoria humana de verdade, tudo de graça.