JoeCaml OCaml Konzepte: Grundlegende Konzepte - Listen

[weiter]

Listen in OCaml

Da Listen in der Regel ein elementares und häufig eingesetztes Sprachkonstrukt darstellen, ist in OCaml eigens dafür ein teilweise an Lisp angelehnter Datentyp integriert.

Liste

Leere oder nicht leere Sequenz von Elementen gleichen Typs

Konstruktoren [] Leere Liste
e::l Neue Liste mit
  • e = head (Erstes Element)
  • l = tail (Restliste)
  • [e1; ... ; en] Liste der Elemente e1 bis en


    [weiter]

    Listen sind parametrisierte Summentypen !

    Beispiel:
    Interne Realisierung des Listentyps

    # type 'a list =
    [] | :: of 'a * 'a list;;

    Listen in OCaml sind parametrisierte Summentypen, da eine Liste entweder die leere Liste beschreibt oder eine (konstruierte) Liste beliebigen Typs, bestehend aus einem Element beliebigen Typs (Label) und einer Restliste des selben beliebigen Typs.


    [weiter]

    Beispiel:
    Liste von Funktionen

    # let addlist =
    let add x y = x + y in
    [add 1; add 2; add 3];;

    val addlist : (int -> int) list = [<fun>; <fun>; <fun>]


    Beispiel:
    Mapping auf Listen

    # let rec map f = function
    [] -> []
    | x::l -> (f x)::(map f l);;

    val map : ('a -> 'b) -> 'a list -> 'b list = <fun>

    Anwendung:
    # map incr [1; 2; 3; 4];;

    - : int list = [2; 3; 4; 5]

    Die Mächtigkeit der Ausdruckskraft funktionaler Programmiersprachen zeigt sich durch die Einfachheit bei der Manipulation und Berechnung von Werten. Hier sei als Beispiel das Mapping von polymorphen Funktionen auf polymorphen Listen genannt.
    Das Mapping bezeichnet hierbei die Anwendung einer beliebigen Funktion auf alle Elemente einer Liste beliebigen Typs.



    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 ] [ Weiterführende Konzepte ]