Wie du OCaml lernst

Ein Überblick, wie du von Grund auf mit OCaml startest


Exercism bietet Übungen und Feedback, aber der Einstieg kann schwierig sein, wenn du OCaml zum ersten Mal lernst. Diese Ressourcen helfen dir beim Start:

Die Dokumentation von OCaml verteilt sich auf mehrere Projekte und ist manchmal schwer zu finden. Das liegt daran, dass es die sogenannte Standardbibliothek gibt (die recht minimale Bibliothek, die mit dem Compiler kommt) und eine Core-Bibliothek (ein separates Projekt von Jane Street, das eine vollständigere und einheitlichere Standardbibliothek bereitstellen will).

Verwirrenderweise wird die Standardbibliothek manchmal als „core library“ bezeichnet (allerdings nur selten als „Core library“).

Die Core-Bibliothek von Jane Street ist für ein paar Übungen erforderlich, kann aber bei allen nützlich sein. Sie ist in drei Teile gegliedert: Base, Core_kernel und Core, wobei jeder den vorherigen erweitert. Base reicht dir für die meisten Übungen, aber bei einigen (etwa beim Arbeiten mit Datumsangaben brauchst du Core_kernel). Um Core zu verwenden, schreibst du open Base oder open Core_kernel an den Anfang deines Codes.

Zum Beispiel bekommst du statt List von Base eine überdeckende Version.(https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/) (open Base macht sie unter dem Namen List verfügbar).

Zwischen dem List-Modul der Standardbibliothek und List aus Core gibt es einige subtile und weniger subtile Unterschiede. In der Standardbibliothek hat List.for_all zum Beispiel die Signatur

val for_all : ('a -> bool) -> 'a list -> bool

in der Core-Bibliothek dagegen

val for_all : 'a t -> f:('a -> bool) -> bool

Die Folge ist: Um zu prüfen, ob alle Zahlen in einer Liste kleiner als 10 sind, musst du mit dem List-Modul aus der Standardbibliothek des Compilers Folgendes schreiben:

List.for_all (fun x -> x < 10) list

und mit dem List-Modul von Core schreibst du:

List.for_all list (fun x -> x < 10)

oder (besser):

List.for_all ~f:(fun x -> x < 10) list

Ein Tipp: Konzentriere dich auf die Core-Bibliothek und ignoriere die Standardbibliothek, es sei denn, du findest in Core wirklich nicht, was du brauchst.