Come imparare OCaml

Una panoramica su come iniziare da zero con OCaml


Exercism offre esercizi e feedback, ma può essere difficile iniziare per chi impara OCaml per la prima volta. Queste risorse possono aiutarti a muovere i primi passi:

La documentazione di OCaml è sparsa su più progetti ed è difficile da trovare, perché esistono quella che a volte viene chiamata libreria standard (la libreria piuttosto minimale che accompagna il compilatore) e una libreria Core (un progetto separato di Jane Street che punta a fornire una libreria standard più completa e coerente).

A complicare le cose, a volte ci si riferisce alla libreria standard come alla «core library» (anche se raramente come alla «Core library»).

La libreria Core di Jane Street è necessaria per alcuni esercizi, ma può essere utile per tutti. È divisa in tre parti, Base, Core_kernel e Core, ognuna delle quali estende la precedente. Base è tutto ciò che ti serve per la maggior parte degli esercizi, ma per alcuni (per esempio quando usi le date) serve Core_kernel. Per usare Core, metti open Base oppure open Core_kernel all'inizio del codice.

Per esempio, invece di List ottieni una versione ombreggiata da Base.(https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/) (open Base la rende disponibile con il nome List).

Ci sono differenze sottili, e altre non così sottili, tra il modulo List della libreria standard e List di Core. Per esempio, nella libreria standard List.for_all ha come firma

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

mentre nella libreria Core ha

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

Di conseguenza, per controllare se tutti i numeri di una lista sono minori di 10 devi scrivere quanto segue con il modulo List della libreria standard del compilatore:

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

e con il modulo List di Core devi scrivere:

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

oppure (preferibilmente):

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

Un consiglio: concentrati sulla libreria Core e ignora la libreria standard, a meno che tu non riesca davvero a trovare in Core quello che ti serve.