Funktionale Programmierung mit Haskell/ Weitere wichtige Haskell-Funktionen

Aus Wikibooks

Weitere interessante Funktionen[Bearbeiten]

Der "Egal"-Operator: _[Bearbeiten]

Bei Rückgabewerten kann es sein, dass ein Wert für die weitere Verarbeitung uninteressant ist. Er braucht nicht an eine Variable gebunden zu werden, sondern wird mit dem Unterstrich _ als "egal" gekennzeichnet (der korrekte Begriff ist "wildcard", also "Stellvertreterzeichen"). Im folgenden Beispiel definieren wir drei Funktionen fst3, snd3 und lst3, die aus 3-Tupeln jeweils den ersten (first), den zweiten (second) oder den letzten (last) Wert zurückgeben:

Beispiel für Wildcards auf ghci
Prelude> let fst3 (x,_,_) = x -- Liefere bei einem Tripel den ersten Wert zurück

Prelude> let snd3 (_,x,_) = x -- Liefere bei einem Tripel den zweiten Wert zurück

Prelude> let lst3 (_,_,x) = x -- Liefere bei einem Tripel den dritten Wert zurück

Prelude> let datum = (2014,10,15) -- definiere ein Tripel

Prelude> fst3 datum -- Zeige den ersten Wert des Tripels an
2014

Prelude> snd3 datum -- Zeige den zweiten Wert des Tripels an
10

Prelude> lst3 datum -- Zeige den letzten Wert des Tripels an
15

Prelude>

Lambda-Abstrahierung[Bearbeiten]

In Haskell können Funktionen in der formalen Sprache des Lambda-Kalküls definiert werden. Der Backslash \ steht dabei für das Lambda-Zeichen . Eine solche Funktion braucht keinen Namen zu haben und ist dann eine anonyme Funktion:

Beispiel Anonyme Funktionen auf ghci
Prelude> (\x -> x * 10) 7 -- Definiert eine (anonyme) Funktion, die x mit 10 multipliziert und wendet sie auf x=7 an
70

Prelude>(\x y -> x * y) 10 7 -- Definiert eine (anonyme) Funktion, die zwei Werte multipliziert und wendet sie auf 10 und 7 an
70

Prelude>let wenigerEins = \x -> x - 1 -- definiert die Funktion "wenigerEins" nach dem Lambda-Kalkül

Prelude>wenigerEins 200
199

Prelude>wenigerEins 199
198

Prelude>wenigerEins 198
197

Prelude>