Ulme - Tupel
Manchmal kann es erforderlich sein, eine Sammlung von Werten unterschiedlicher Typen zu speichern. Elm gibt uns eine Datenstruktur namens Tupel, die diesem Zweck dient.
Ein Tupel repräsentiert eine heterogene Sammlung von Werten. Mit anderen Worten, Tupel ermöglichen das Speichern mehrerer Felder unterschiedlichen Typs. Ein Tupel speichert eine feste Anzahl von Werten. Tupel sind nützlich, wenn Sie mehrere Werte unterschiedlichen Typs von einer Funktion zurückgeben möchten. Diese Datenstrukturen sind wie andere Arten in Ulme unveränderlich.
Syntax
(data1,data2)
Ein einfaches Beispiel ist unten gezeigt -
> ("TuotrialsPoint",5,True,"Hyderabad")
("TuotrialsPoint",5,True,"Hyderabad") : ( String, number, Bool, String )
In unseren folgenden Abschnitten lernen wir die verschiedenen Tupeloperationen kennen.
zuerst
Diese Operation extrahiert den ersten Wert aus einem Tupel.
Syntax
Tuple.first tuple_name
> Tuple.first
<function> : ( a1, a2 ) -> a1
Illustration
> Tuple.first (10,"hello")
10 : number
zweite
Das second Die Tupeloperation extrahiert den zweiten Wert aus einem Tupel.
Syntax
Tuple.second tuple_name
> Tuple.second
<function> : ( a1, a2 ) -> a2
Illustration
> Tuple.second (10,"hello")
"hello" : String
Liste der Tupel
Eine Liste kann Tupel speichern. Wenn Tupel in einer Liste verwendet werden, stellen Sie sicher, dass alle vom gleichen Datentyp sind und die gleiche Anzahl von Parametern haben.
Illustration
> [("hello",20),("world",30)]
[("hello",20),("world",30)] : List ( String, number )
Tupel mit Funktion
Eine Funktion kann Tupel zurückgeben. Außerdem können Tupel als Parameter an Funktionen übergeben werden.
Abbildung 1
Das folgende Beispiel definiert eine Funktion fn_checkEven. Diese Funktion akzeptiert einen ganzzahligen Wert als Parameter und gibt ein Tupel zurück.
> fn_checkEven no = \
if no%2 == 0 then \
(True,"The no is Even")\
else \
(False,"No is not even")
<function> : Int -> ( Bool, String )
> fn_checkEven 10
(True,"The no is Even") : ( Bool, String )
> fn_checkEven 11
(False,"No is not even") : ( Bool, String )
>
Abbildung 2
Im Folgenden wird ein Tupel als Parameter an eine Funktion übergeben.
> fn_add (a,b) = \
| a+b
<function> : ( number, number ) -> number
> fn_add (10,20)
30 : number
Die Funktion fn_add nimmt ein Tupel mit 2 numerischen Werten und gibt deren Summe zurück.
Destrukturierung
Bei der Destrukturierung wird ein Tupel in einzelne Werte zerlegt. Um auf einzelne Werte in einem Tupel mit drei oder mehr Elementen zuzugreifen, verwenden wir die Destrukturierung. Hier ordnen wir jeden Wert in einem Tupel verschiedenen Variablen zu. Mit _ kann man Platzhalter für Werte definieren, die ignoriert oder übersprungen werden.
Illustration
> (first,_,_) = (10,20,30)
10 : number
> first
10 : number
Illustration
In diesem Beispiel verwenden wir die let..in-Blocksyntax zur Destrukturierung. Der let-Block enthält die Variablen und der in-Block enthält Ausdrücke, die ausgewertet werden sollen, und Werte, die zurückgegeben werden sollen.
> t1 = (10,20,30)
(10,20,30) : ( number, number1, number2 )
> let \
(a,b,c) = t1 \
in\
a + b +c
60 : number
Wir deklarieren Variablen abc in der let-Klausel und greifen mit der in-Klausel darauf zu.