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.