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.