OCaml Konzepte: Grundlegende Konzepte - 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:
|
|
Pattern Matching | Mechanismus:
|
|
Syntax: |
|
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.
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 |
|
|
vereinfacht: |
|
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.