JoeCaml OCaml Konzepte: Grundlegende Konzepte - Pattern Matching

[weiter]

Pattern Matching

Pattern Matching ist eine der Stärken der ML-Sprachfamilie und wird bei allen Bindungsmechanismen (z.B. Variablen, Funktionen) verwendet.

Pattern Ausdruck bestehend aus:
  • Variablen
  • Konstanten
  • Wildcards
Pattern Matching Mechanismus:
  • Gegenüberstellung und Vergleich von Pattern und Wert
  • Variablenbindung bei Übereinstimmung
Syntax:

# match expr with
patt1 -> expr1
| patt2
| patt3 -> expr2
| pattn -> exprn;;

Die Abarbeitung eines Match-Ausdrucks erfolgt in der Reihenfolge der Deklaration, also von oben nach unten.
Mehrere Patterns können dabei einem Wert gegenübergestellt werden und Match-Ausdrücke müssen vollständig sein, d.h. alle möglichen Fälle müssen bei einem Match abgedeckt sein. Existiert kein passendes Pattern bei einem Match führt das zu einer Exception.


[weiter]

triviales Pattern Matching !

Beispiel:
Funktionsapplikation

# ( fun x -> expr ) ( value );;

Wird eine Funktion mit einem Wert des Parametertyps aufgerufen, so wird dieser an x gebunden, da jeder Wert des Parametertyps mit den Pattern übereinstimmt.
Die Variable x steht dabei für ein triviales Pattern, da keine Aussage über die Form des Ausdrucks vorgenommen wird, und damit folglich immer mit einem Wert übereinstimmt.


triviales Pattern Matching !

Beispiel:
Mehrfachauswahl

# let is_digit d =
match d with
'0'
| '1'
| '2'
| '3'
| '4'
| '5'
| '6'
| '7'
| '8'
| '9' -> true
| c -> false;;

vereinfacht:

# let is_digit d = function
'0' .. '9' -> true
| _ -> false;;

Die Variable c dient als Wildcard, da sie im Rumpf (false) nicht gebunden wird (Beispiel oben).
In der Regel verwendet man dafür die Wildcard "_", welche als "don't care" bezeichnet wird und auf jeden beliebigen Wert passt.
Der Wert kann jedoch dabei nicht mehr abgefragt werden.Dafür kann diese namenslose Variable im Gegensatz zu normalen Variablen, welche in einem Pattern nur einmal vorkommen dürfen, mehrfach auftreten und dabei für möglicherweise verschiedene Werte stehen.

Die Hauptanwendung von Pattern Matching ist jedoch die Zerlegung von Datenstrukturen, wie Listen, Tupel und Records.



Hinweis:

"#" kennzeichnet Eingaben im OCaml Interpreter,
"val" bzw "- :" das Ergebnis der Auswertung und automatischen Typanalyse inkl. der vom System inferierten Typen.



[ Seminar "Programmierkonzepte und Programmiersprachen" ] [ Gliederung ] [ Grundlegende Konzepte ] [ Polymorphismus in OCaml ]