As listas estão incorporadas na linguagem Elixir. São consideradas um tipo básico, representadas por parênteses retos. 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 as listas como uma lista ligada, em que cada nó guarda dois valores: o primeiro item e outra lista com todos os itens restantes. O primeiro item da lista é designado por cabeça e a lista de itens restantes é designada por cauda. Podemos usar esta 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 acrescentar elementos ao início de uma lista:
# Suppose
list = [2, 1]
[3, 2, 1] == [3 | list]
# => true
Existem 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 tens de implementar algumas funções para manipular uma lista de linguagens de programação.
Define a função new/0, que não recebe argumentos e devolve uma lista vazia.
LanguageList.new()
# => []
Define a função add/2, que recebe 2 argumentos (uma lista de linguagens e um literal de string de uma linguagem). Deve devolver a lista resultante, com a nova linguagem acrescentada ao início da lista indicada.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
Define a função remove/1, que recebe 1 argumento (uma lista de linguagens). Deve devolver a lista sem o primeiro elemento. Assume que a lista tem sempre pelo menos um elemento.
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"]
Define a função first/1, que recebe 1 argumento (uma lista de linguagens). Deve devolver a primeira linguagem da lista. Assume que a lista tem sempre pelo menos um elemento.
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"
Define a função count/1, que recebe 1 argumento (uma lista de linguagens). Deve devolver 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
Define a função functional_list?/1, que recebe 1 argumento (uma lista de linguagens). Deve devolver um valor Boolean. Deve devolver 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
Inscreve-te no Exercism para aprenderes e dominares Elixir com 58 conceitos168 exercícios, e mentoria humana real, tudo grátis.