Listen sind in Elixir eingebaut. Sie gelten als grundlegender Typ und werden durch eckige Klammern gekennzeichnet. Listen können leer sein oder beliebig viele Elemente beliebigen Typs enthalten. Zum Beispiel:
empty_list = []
one_item_list = [1]
two_item_list = [1, 2]
multiple_type_list = [1, :pi, 3.14, "four"]
Elixir implementiert Listen als verkettete Liste, bei der jeder Knoten zwei Werte speichert: das erste Element und eine weitere Liste mit allen restlichen Elementen. Das erste Element der Liste wird als Kopf bezeichnet, die restliche Liste als Rest. Diese Notation können wir im Code verwenden:
# [1] represented in [head | tail] notation
[1 | []]
# [1, 2, 3] represented in [head | tail] notation
[1 | [2 | [3 | []]]]
Mit der Notation [head | tail] können wir einer Liste Elemente voranstellen:
# Suppose
list = [2, 1]
[3, 2, 1] == [3 | list]
# => true
Im Modul Kernel gibt es mehrere Funktionen für die Arbeit mit Listen, ebenso wie das gesamte Modul List.
# Check if 1 is a member of the list
1 in [1, 2, 3, 4]
# => true
In dieser Übung implementierst du einige Funktionen, um eine Liste von Programmiersprachen zu bearbeiten.
Definiere die Funktion new/0, die keine Argumente entgegennimmt und eine leere Liste zurückgibt.
LanguageList.new()
# => []
Definiere die Funktion add/2, die 2 Argumente entgegennimmt (eine Sprachenliste und ein String-Literal einer Sprache). Sie sollte die resultierende Liste zurückgeben, wobei die neue Sprache der übergebenen Liste vorangestellt wird.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
Definiere die Funktion remove/1, die 1 Argument entgegennimmt (eine Sprachenliste). Sie sollte die Liste ohne das erste Element zurückgeben. Gehe davon aus, dass die Liste immer mindestens ein Element enthält.
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"]
Definiere die Funktion first/1, die 1 Argument entgegennimmt (eine Sprachenliste). Sie sollte die erste Sprache in der Liste zurückgeben. Gehe davon aus, dass die Liste immer mindestens ein Element enthält.
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"
Definiere die Funktion count/1, die 1 Argument entgegennimmt (eine Sprachenliste). Sie sollte die Anzahl der Sprachen in der Liste zurückgeben.
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
Definiere die Funktion functional_list?/1, die 1 Argument entgegennimmt (eine Sprachenliste). Sie sollte einen booleschen Wert zurückgeben. Sie sollte wahr zurückgeben, wenn "Elixir" eine der Sprachen in der Liste ist.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elixir")
# => ["Elixir"]
LanguageList.functional_list?(language_list)
# => true
Melde dich bei Exercism an, um Elixir mit 58 Konzepte168 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.