Percursos
/
Elixir
Elixir
/
Exercícios
/
Lista de Linguagens
Lista de Linguagens

Lista de Linguagens

Exercício de aprendizagem

Introdução

Listas

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

Instruções

Neste exercício tens de implementar algumas funções para manipular uma lista de linguagens de programação.

1. Define uma função que devolve uma lista de linguagens vazia

Define a função new/0, que não recebe argumentos e devolve uma lista vazia.

LanguageList.new()
# => []

2. Define uma função que adiciona uma linguagem à lista

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"]

3. Define uma função que remove uma linguagem da lista

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"]

4. Define uma função que devolve o primeiro elemento da lista

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"

5. Define uma função que devolve quantas linguagens tem a lista

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

6. Define uma função que determina se a lista inclui uma linguagem funcional

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
Editar via GitHub A ligação abre numa nova janela ou separador
Elixir Exercism

Estás pronto para começar Lista de Linguagens?

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