Ulme - Liste

Die Datenstrukturen List, Tuples und Record können zum Speichern einer Sammlung von Werten verwendet werden.

In diesem Kapitel wird die Verwendung von List in Elm erläutert.

Eine Liste ist eine Sammlung homogener Werte. Die Werte in einer Liste müssen alle vom gleichen Datentyp sein.

Beachten Sie die folgenden Einschränkungen, wenn Sie Variablen zum Speichern von Werten verwenden:

  • Variablen sind skalarer Natur. Mit anderen Worten, zum Zeitpunkt der Deklaration kann eine Variable nur einen Wert enthalten. Dies bedeutet, dass zum Speichern von n Werten in einem Programm n Variablendeklarationen erforderlich sind. Daher ist die Verwendung von Variablen nicht möglich, wenn eine größere Sammlung von Werten gespeichert werden muss.

  • Variablen in einem Programm wird Speicher in zufälliger Reihenfolge zugewiesen, wodurch es schwierig wird, die Werte in der Reihenfolge ihrer Deklaration abzurufen / zu lesen.

Syntax

List_name = [value1,value2,value3.....valuen]

Illustration

Das folgende Beispiel zeigt, wie eine Liste in Elm verwendet wird. Versuchen Sie dieses Beispiel in Ulme REPL -

> myList1 = [10,20,30]
[10,20,30] : List number
> myList2 = ["hello","world"]
["hello","world"] : List String

Wenn wir versuchen, Werte verschiedener Typen zu einer Liste hinzuzufügen, gibt der Compiler einen Typ-Mismatch-Fehler aus. Dies ist unten gezeigt.

> myList = [1,"hello"]
-- TYPE MISMATCH 
--------------------------------------------- 
repl-temp-000.elm

The 1st and 2nd entries in this list are different types of values.

4| [1,"hello"]
^^^^^^^
The 1st entry has this type:
   number
But the 2nd is:
   String

Operationen auflisten

Die folgende Tabelle zeigt die allgemeinen Operationen in einer Liste -

Sr. Nr Methode Beschreibung
1 isEmpty: Liste a -> Bool prüft, ob die Liste leer ist
2 umgekehrt: Liste a -> Bool kehrt die Eingabeliste um
3 Länge: Liste a -> Int Gibt die Größe der Liste zurück
4 Maximum: Liste vergleichbar -> Vielleicht. Vielleicht vergleichbar Gibt den Maximalwert zurück
5 Minimum: Liste vergleichbar -> Vielleicht. Vielleicht vergleichbar Gibt den Mindestwert zurück
6 Summe: Listennummer -> Nummer Gibt die Summe aller Elemente in der Liste zurück
7 Produkt: Listennummer -> Nummer prüft, ob die Liste leer ist
8 sort: Liste vergleichbar -> Liste vergleichbar sortiert Liste in aufsteigender Reihenfolge
9 concat: Liste (Liste a) -> Liste a führt eine Reihe von Listen zu einer zusammen
10 anhängen: Liste a -> Liste a -> Liste a führt zwei Listen zusammen
11 Bereich: Int -> Int -> Liste Int Gibt eine Liste mit Zahlen von Anfang bis Ende zurück
12 Filter: (a -> Bool) -> Liste a -> Liste a Filtert die Werteliste aus der Eingabeliste
13 head: Liste a -> Vielleicht. Vielleicht a Gibt das erste Element aus der Liste zurück
14 Schwanz :: Liste a -> Vielleicht.Maibe (Liste a) Gibt alle Elemente außer dem Kopf zurück

ist leer

Diese Funktion gibt true zurück, wenn eine Liste leer ist.

Syntax

List.isEmpty list_name

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.isEmpty
<function> : List a -> Bool

Illustration

> List.isEmpty
<function> : List a -> Bool

> List.isEmpty [10,20,30]
False : Bool

umkehren

Diese Funktion kehrt die Liste um.

Syntax

List.reverse list_name

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.reverse
<function> : List a -> List a

Illustration

> List.reverse [10,20,30]
[30,20,10] : List number

Länge

Diese Funktion gibt die Länge einer Liste zurück.

Syntax

List.length list_name

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.length
<function> : List a -> Int

Illustration

> List.length [10,20,30]
3 : Int

maximal

Diese Funktion gibt das maximale Element in einer nicht leeren Liste zurück.

Syntax

List.maximum list_name

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.maximum
<function> : List comparable -> Maybe.Maybe comparable

Illustration

> List.maximum [10,20,30]
Just 30 : Maybe.Maybe number
> List.maximum []
Nothing : Maybe.Maybe comparable

Minimum

Diese Funktion gibt das minimale Element in einer nicht leeren Liste zurück.

Syntax

List.minimum list_name

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.minimum
<function> : List comparable -> Maybe.Maybe comparable

Illustration

> List.minimum [10,20,30]
Just 10 : Maybe.Maybe number

Summe

Diese Funktion gibt die Summe aller Elemente in einer Liste zurück.

Syntax

List.sum list_name

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.sum
<function> : List number -> number

Illustration

> List.sum [10,20,30]
60 : number

Produkt

Diese Funktion gibt das Produkt aller Elemente in einer Liste zurück.

Syntax

List.product list_name

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

<function>  : List number ->  number

Illustration

List.product [10,20,30]
6000 : number

Sortieren

Diese Funktion sortiert die Werte in einer Liste vom niedrigsten zum höchsten Wert.

Syntax

List.sort list_name

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.sort
<function> : List comparable -> List comparable

Illustration

> List.sort [10,20,30]
[10,20,30] : List number

concat

Diese Funktion verkettet eine Reihe von Listen zu einer einzigen Liste.

Syntax

List.concat [ [list_name1],[list_name2],[list_name3],.....[list_nameN] ]

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.concat
<function> : List (List a) -> List a

Illustration

> List.concat [[10,20], [30,40],[50,60]]
[10,20,30,40,50,60] : List number

anhängen

Diese Funktion fügt zwei Listen zusammen.

Syntax

List.append [list_name1] [list_name2]

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.append
<function> : List a -> List a -> List a

Illustration

> List.append [10,20] [30,40]
[10,20,30,40] : List number

Der ++ - Operator kann auch verwendet werden, um eine Liste an eine andere anzuhängen. Dies wird im folgenden Beispiel gezeigt -

> [10.1,20.2] ++ [30.3,40.4]
[10.1,20.2,30.3,40.4] : List Float

Angebot

Diese Funktion erstellt eine Liste von Zahlen, wobei jedes Element um eins erhöht wird. Die niedrigste und die höchste Zahl, die in der Liste enthalten sein sollte, werden an die Funktion übergeben.

Syntax

List.range start_range end_range

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.range
<function> : Int -> Int -> List Int

Illustration

> List.range 1 10
[1,2,3,4,5,6,7,8,9,10] : List Int

Filter

Diese Funktion filtert eine Reihe von Werten aus der Eingabeliste. Behalten Sie nur die Werte bei, die den Test bestehen.

Syntax

List.filter test_function input_list

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.filter
<function> : (a -> Bool) -> List a -> List a

Illustration

Das folgende Beispiel filtert alle geraden Zahlen aus einer Eingabeliste

> List.filter (\n -> n%2==0) [10,20,30,55]
[10,20,30] : List Int

Kopf

Diese Funktion gibt das erste Element aus der Eingabeliste zurück.

Syntax

List.head input_list

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.head
<function> : List a -> Maybe.Maybe a

Illustration

> List.head [10,20,30,40]
Just 10 : Maybe.Maybe number
> List.head []
Nothing : Maybe.Maybe a

Schwanz

Diese Funktion gibt alle Elemente nach dem ersten in der Liste zurück.

Syntax

List.tail input_list

Um die Signatur der Funktion zu überprüfen, geben Sie Folgendes in elm REPL - ein.

> List.tail
<function> : List a -> Maybe.Maybe (List a)

Illustration

> List.tail [10,20,30,40,50]
Just [20,30,40,50] : Maybe.Maybe (List number)
> List.tail [10]
Just [] : Maybe.Maybe (List number)
> List.tail []
Nothing : Maybe.Maybe (List a)

Verwenden des Cons-Operators

Der Nachteile-Operator (::) fügt ein Element am Anfang einer Liste hinzu.

Illustration

> 10::[20,30,40,50]
[10,20,30,40,50] : List number

Das neu hinzuzufügende Element und der Datentyp der Werte in der Liste müssen übereinstimmen. Der Compiler gibt einen Fehler aus, wenn die Datentypen nicht übereinstimmen.

> [1,2,3,4]::[5,6,7,8]
-- TYPE MISMATCH ---------------------------------
------------ repl-temp-000.elm

The right side of (::) is causing a type mismatch.

3| [1,2,3,4]::[5,6,7,8]
			  ^^^^^^^^^
(::) is expecting the right side to be a:

   List (List number)

But the right side is:

   List number
Hint: With operators like (::) I always check the left side first. If it seems fine, 
I assume it is correct and check the right side. So the 
problem may be in how the left and right arguments interact.

Listen sind unveränderlich

Lassen Sie uns prüfen, ob Listen in Elm unveränderlich sind. Die erste Liste myList erstellt bei Verkettung mit Wert 1 eine neue Liste und wird an myListCopy zurückgegeben . Wenn wir also die Anfangsliste anzeigen, werden ihre Werte nicht geändert.

> myList = [10,20,30]
[10,20,30] : List number
> myListCopy = 1::myList
[1,10,20,30] : List number
> myList
[10,20,30] : List number
>myList == myListCopy
False : Bool