JoeCaml OCaml Konzepte: Grundlegende Konzepte - Summentypen

[weiter]

Summentypen in OCaml

Summentypen realisieren unter anderem die Möglichkeit der Verwendung von Aufzählungstypen.
Der vorrangige Einsatzbereich ist jedoch die Definition eigener rekursiver Datenstrukturen. Komplexe, zusammengesetzte, parametrisierbare Datenstrukturen (z.B. Bäume) für beliebige Datentypen lassen sich einfach als Summentyp erstellen und vor allem verarbeiten.

Summentyp

  • Menge optionaler Typen
  • Bekannt als: (Disjoint) Unions bzw. Variante Records

  • [weiter]

    Beispiel:
    Aufzählungstyp

    # type color =
    Blue
    | Green
    | Red
    | Yellow

    Aufzählungstypen sind in funktionalen Sprachen in der Regel Spezialfälle von Summentypen in Form einer Typdefinition mit Hilfe von Konstruktoren, die für jeweils eine Konstante stehen.


    [weiter]

    Erstellung und Verarbeitung komplexer Datenstrukturen

    Beispiel:
    Binär-Baum für beliebige Datentypen

    # type 'a btree =
    Leaf
    | Node of 'a btree * 'a * 'a btree;;


    Erzeugung durch Konstruktoren


    # Node(1, Leaf, Leaf);;

    - : int btree = Node(1, Leaf, Leaf)

    Node und Leaf sind hierbei Konstruktoren, also Funktionen die eine (mit Werten initialisierte) Variante des Summentyps zurückliefern.
    Der Resultatwert des Konstruktors Node steht dabei für eine benannte Konstante.


    Verarbeitung erfolgt durch Pattern Matching

    Beispiel:
    Kardinalität von Binär-Baum

    # let rec card = function
    Leaf -> 0
    | Node( _ , left, right ) -> card left + card right + 1;;

    val card : 'a btree -> int = <fun>

    Zugehörigkeit zu Binär-Baum

    # let rec member x = function
    Leaf -> false
    | Node( y , left, right ) ->
    (x = y)
    || (member x left)
    || (member x right);;

    val member : 'a -> 'a btree -> bool = <fun>



    Hinweis:

    "#" kennzeichnet Eingaben im OCaml Interpreter,
    "val" bzw "- :" das Ergebnis der Auswertung und automatischen Typanalyse inkl. der vom System inferierten Typen.



    [ Seminar "Programmierkonzepte und Programmiersprachen" ] [ Gliederung ] [ Grundlegende Konzepte ] [ Listen in OCaml ]