Gli array sono integrati nel linguaggio Elixir. Sono considerati un tipo di base, indicati dalle parentesi quadre ([]). Gli array possono essere vuoti o contenere un numero qualsiasi di elementi di qualsiasi tipo. Per esempio:
empty_list = []
one_item_list = [1]
two_item_list = [1, 2]
multiple_type_list = [1, :pi, 3.14, "four"]
Elixir implementa gli array come una lista concatenata, in cui ogni nodo memorizza due valori: il primo elemento e un altro array con tutti gli elementi rimanenti. Il primo elemento dell'array è chiamato «head» e l'array di elementi rimanenti è chiamato «tail». Possiamo usare questa notazione nel codice:
# [1] represented in [head | tail] notation
[1 | []]
# [1, 2, 3] represented in [head | tail] notation
[1 | [2 | [3 | []]]]
Possiamo usare la notazione [head | tail] per anteporre elementi a un array:
# Suppose
list = [2, 1]
[3, 2, 1] == [3 | list]
# => true
Ci sono diverse funzioni nel modulo Kernel per lavorare con gli array, oltre all'intero modulo List.
# Check if 1 is a member of the list
1 in [1, 2, 3, 4]
# => true
In questo esercizio devi implementare alcune funzioni per manipolare un array di linguaggi di programmazione.
Definisci la funzione new/0 che non prende argomenti e restituisce un array vuoto.
LanguageList.new()
# => []
Definisci la funzione add/2 che prende 2 argomenti (un array di linguaggi e una stringa letterale di un linguaggio). Deve restituire l'array risultante, con il nuovo linguaggio anteposto all'array dato.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
Definisci la funzione remove/1 che prende 1 argomento (un array di linguaggi). Deve restituire l'array senza il primo elemento. Supponi che l'array abbia sempre almeno 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"]
Definisci la funzione first/1 che prende 1 argomento (un array di linguaggi). Deve restituire il primo linguaggio nell'array. Supponi che l'array abbia sempre almeno 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"
Definisci la funzione count/1 che prende 1 argomento (un array di linguaggi). Deve restituire il numero di linguaggi nell'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
Definisci la funzione functional_list?/1 che prende 1 argomento (un array di linguaggi). Deve restituire un valore booleano. Deve restituire true se «Elixir» è uno dei linguaggi nell'array.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elixir")
# => ["Elixir"]
LanguageList.functional_list?(language_list)
# => true
Iscriviti a Exercism per imparare e padroneggiare Elixir con 58 concetti168 esercizi e il mentoring di persone reali, tutto gratis.