Las listas están integradas en el lenguaje Elixir. Se consideran un tipo básico, denotado por corchetes. Las listas pueden estar vacías o contener cualquier cantidad 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, donde 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 necesitas implementar algunas funciones para manipular una lista de lenguajes de programación.
Define la función new/0 que no toma argumentos y devuelve una lista vacía.
LanguageList.new()
# => []
Define la función add/2 que toma 2 argumentos (una lista de lenguajes y un literal de cadena de un lenguaje). Debe devolver la lista resultante con el nuevo lenguaje antepuesto a la lista dada.
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 (una lista de lenguajes). Debe devolver la lista sin el primer elemento. Supón que la lista 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 (una lista de lenguajes). Debe devolver el primer lenguaje de la lista. Supón que la lista 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 (una lista de lenguajes). Debe devolver la cantidad de lenguajes en la 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 la función functional_list?/1 que toma 1 argumento (una lista de lenguajes). Debe devolver un valor booleano. Debe devolver true si «Elixir» es uno de los lenguajes de la lista.
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.