— user@ocaml-programming —
user@ocaml-programming $ cat ./ocaml-programming.md (main)

ocaml-programming

# OCaml für die Praxis — eine Tutorial-Reihe.

~/ / docs / Grundlagen / 02 · Grundlagen

Erste Programme — let, Funktionen, Werte

let-Bindungen, anonyme Funktionen und der Unterschied zwischen Wert und Funktion — die Grundbausteine jeder OCaml-Datei.

OCaml ist eine expression-basierte Sprache. Fast alles ist ein Ausdruck mit Typ und Wert — auch Verzweigungen, auch Schleifen-Ersatz. Die wichtigste Konstruktion zum Festhalten dieser Werte ist let.

let bindet Werte

Eine let-Bindung verknüpft einen Namen mit einem Wert. Der Typ wird vom Compiler abgeleitet:

let pi = 3.14159
let greeting = "Hallo"
let answer = 42

In der REPL bestätigt OCaml den abgeleiteten Typ. Bindungen sind immutabel — ein nochmaliges let pi = 4.0 erzeugt nicht etwa eine Mutation, sondern eine neue Bindung, die die alte im aktuellen Scope verdeckt.

let ... in schachtelt Bindungen innerhalb eines Ausdrucks. Das ist der typische lokale Variablenstil:

let area_circle r =
  let pi = 3.14159 in
  pi *. r *. r

Achte auf den Punkt in *. — OCaml unterscheidet streng zwischen Integer- und Float-Operatoren. * multipliziert int, *. multipliziert float. Diese Trennung wirkt zunächst pedantisch, vermeidet aber stille Konvertierungsfehler.

Funktionen sind Werte

In OCaml ist eine Funktion einfach ein Wert mit Pfeil-Typ. Diese beiden Definitionen sind äquivalent:

let double x = x * 2

let double = fun x -> x * 2

Funktionen mit mehreren Argumenten sind curried — sie nehmen ein Argument nach dem anderen und geben dazwischen jeweils eine neue Funktion zurück:

let add a b = a + b
(* val add : int -> int -> int *)

let add5 = add 5
(* val add5 : int -> int *)

let result = add5 10  (* 15 *)

Das Phänomen heißt partielle Applikation und wird ständig genutzt — etwa um aus generischen Funktionen spezialisierte Varianten abzuleiten.

Ausdrücke statt Anweisungen

if liefert einen Wert zurück. Beide Zweige müssen denselben Typ haben:

let classify n =
  if n > 0 then "positiv"
  else if n < 0 then "negativ"
  else "null"

Wer aus C oder Python kommt, gewöhnt sich schnell daran, dass es kein return gibt — der letzte Ausdruck einer Funktion ist der Rückgabewert. Übung im REPL:

utop # double (add 3 4) ;;
- : int = 14

Damit stehen die Grundbausteine. Das nächste Kapitel führt Pattern Matching ein — das zentrale Werkzeug, mit dem OCaml-Code seine charakteristische Form bekommt.