OCaml Konzepte: Grundlegende Konzepte - Das Typensystem von OCaml |
Typen | Beschreibung für eine Menge von Werten | |
Werte | Zahlen, Zeichen, Listen, Funktionen, ... |
Die ML-Sprachfamilie ist statisch und streng getypt.
Das heißt der Typ aller Variablen und Konstanten wird vollständig und statisch zur Übersetzungszeit ermittelt.
Automatische Typenanalyse | Typinferenz und Typsynthese |
Unter Typinferenz versteht man die Bestimmung von Typen zu ungetypten Ausdrücken,
jedoch sind nicht alle Ausdrücke typisierbar.
OCaml ist in der Lage, mittels des Mechanismus der automatischen Typenanalyse durch Typinferenz und Typsynthese,
den Typ eines Ausdrucks ohne vorgegebene Typeninformation selbst herzuleiten.
Dabei geht OCaml wie folgt vor:
Vorgehensweise | Jedem Unterausdruck wird ein Typ zugewiesen |
Primitive Datentypen in OCaml:
Typ | Operatoren |
---|---|
unit | keine |
bool | not , && , || , ... |
int | + , * , - , / , = , <> , < , > , ... |
float | +. , *. , -. , /. , < , > , ... |
char | = , <> , < , > , ... |
string | = , <> , < , > , ... |
Alle in einer modernen Hochsprache benötigten bzw. gewünschten Datentypen stehen durch die in der Kern-Bibliothek vordefinierten Typen zur Verfügung.
Der Typ unit entspricht dem Datentypen void in C und wird für resultatlose Funktionen (vorwiegend Prozeduren zur E\A-Verarbeitung) verwendet,
oder dient als Platzhalter, wenn keine Werte übergeben werden müssen.
Es existieren unterschiedliche arithmetische Operatoren jeweils für Ganzzahlarithmetik und Fließkommazahlarithmetik.
Die relationalen Operatoren (zweiargumentige vordefinierte Funktionen) sind überwiegend polymorph, d.h. für mehrere Datentypen definiert.
Ausserdem bietet OCaml die integrierten Datentypen Array und Liste, sowie die Möglichkeit eigene Datentypen (Aggregattypen) wie Records, Unions und Tupel zu definieren.