OCaml - Teil 2 Der Datentyp 'a steht für eine Variable beliebigen Typs Patternmatching über Typen - Typdefinition: type name=Typname1 of datentyp1 | Typname2 of datentyp2 | ...;; Achtung: Datentypen immer klein in OCaml schreiben, d.h. name, datentyp1,... klein und Typname1,... groß schreiben Rekursion: möglich falls für Datentyp name eingesetzt wird - Patternmatching match x with | Typname1 variable1 -> ... | Typname2 variable2 -> ... - Beispiel: type zahl = Ganz of int | Komma of float;; let inc x = match x with (* Funktion: zahl-> zahl *) | Ganz a -> Ganz (a+1) | Komma a -> Komma (a+.1.);; inc (Ganz 1);; (* liefert 2 als Ganz = int *) inc (Komma 2.);; (* liefert 3. als Komma = float *) Funktionen als Parameter In OCaml können auch ganze Funktionen als Parameter übergeben werden, der Typ der Funktion wird dabei durch den Aufruf in der Funktion festgelegt - Beispiel: Die Funktion h(x) = f(x) * g(x), mit f(x) und g(x) beliebige Funktion aus int->int soll möglichst allgemein implementiert werden: let h2 f g x = (f x)*(g x);; val h2:('a -> int)->('a -> int)->'a->int=<fun> let f x=2*x;; let g x=2+x;; let h = h2 f g;; (* Currying *) h 3;; (* liefert 6*5 = 30 *)