Las listas están integradas en el lenguaje Elixir. Se consideran un tipo básico y se denotan con corchetes. Las listas pueden estar vacías o contener cualquier número de elementos de cualquier tipo. Por ejemplo:
empty_list = []
one_item_list = [1]
two_item_list = [1, 2]
multiple_type_list = [1, :pi, 3.14, "four"]
Elixir implementa las listas como una lista enlazada, en la que cada nodo almacena dos valores: el primer elemento y otra lista con todos los elementos restantes. Al primer elemento de la lista se le llama cabeza y a la lista de elementos restantes se le llama cola. Podemos usar esta notación en el código:
# [1] represented in [head | tail] notation
[1 | []]
# [1, 2, 3] represented in [head | tail] notation
[1 | [2 | [3 | []]]]
Podemos usar la notación [head | tail] para anteponer elementos a una lista:
# Suppose
list = [2, 1]
[3, 2, 1] == [3 | list]
# => true
Hay varias funciones en el módulo Kernel para trabajar con listas, así como todo el módulo List.
# Check if 1 is a member of the list
1 in [1, 2, 3, 4]
# => true
En este ejercicio tienes que implementar algunas funciones para manipular un array de lenguajes de programación.
Define la función new/0, que no toma ningún argumento y devuelve un array vacío.
LanguageList.new()
# => []
Define la función add/2, que toma 2 argumentos (un array de lenguajes y un literal de string de un lenguaje). Debe devolver el array resultante con el nuevo lenguaje antepuesto al array dado.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
Define la función remove/1, que toma 1 argumento (un array de lenguajes). Debe devolver el array sin el primer elemento. Supón que el array siempre tendrá al menos un 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 la función first/1, que toma 1 argumento (un array de lenguajes). Debe devolver el primer lenguaje del array. Supón que el array siempre tendrá al menos un 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 la función count/1, que toma 1 argumento (un array de lenguajes). Debe devolver el número de lenguajes que hay en el array.
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 la función functional_list?/1, que toma 1 argumento (un array de lenguajes). Debe devolver un valor de tipo Boolean. Debe devolver true si «Elixir» es uno de los lenguajes del array.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elixir")
# => ["Elixir"]
LanguageList.functional_list?(language_list)
# => true
Regístrate en Exercism para aprender y dominar Elixir con 58 conceptos168 ejercicios y mentoría humana real, todo gratis.