OCaml - Teil 2

Werbung
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 *)
Herunterladen