Un aperçu de la façon de débuter avec OCaml à partir de zéro
Exercism propose des exercices et des retours, mais il n'est pas toujours facile de s'y lancer quand on apprend OCaml pour la première fois. Ces ressources peuvent t'aider à démarrer :
La documentation d'OCaml est répartie sur plusieurs projets et peut être difficile à trouver, car il y a ce qu'on appelle parfois la bibliothèque standard (la bibliothèque plutôt minimale qui accompagne le compilateur) et une bibliothèque Core (un projet distinct de Jane Street qui vise à fournir une bibliothèque standard plus complète et plus cohérente).
Fait déroutant, la bibliothèque standard est parfois appelée « core library » (mais rarement « Core library »).
La bibliothèque Core de Jane Street est nécessaire pour quelques exercices, mais elle peut être utile pour tous. Elle se divise en trois parties : Base, Core_kernel et Core, chacune étendant la précédente.
Base suffit pour la plupart des exercices, mais pour quelques-uns (ceux qui utilisent des dates, par exemple), Core_kernel est nécessaire.
Pour utiliser Core, place open Base ou open Core_kernel en haut du code.
Par exemple, au lieu de List, tu obtiens une version fournie par Base, qui masque la première.(https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/) (open Base rend cette version disponible sous le nom List).
Il existe des différences subtiles, et d'autres qui le sont moins, entre le module List de la bibliothèque standard et le List de Core. Par exemple, dans la bibliothèque standard, List.for_all présente la signature suivante :
val for_all : ('a -> bool) -> 'a list -> bool
alors que dans la bibliothèque Core, elle présente celle-ci :
val for_all : 'a t -> f:('a -> bool) -> bool
La conséquence, c'est que pour vérifier que tous les nombres d'une liste sont inférieurs à 10, voici ce qu'il faut écrire avec le module List fourni avec le compilateur :
List.for_all (fun x -> x < 10) list
et avec le module List de Core, tu dois écrire :
List.for_all list (fun x -> x < 10)
ou, de préférence :
List.for_all ~f:(fun x -> x < 10) list
Un conseil : concentre-toi sur la bibliothèque Core et ignore la bibliothèque standard, à moins de ne vraiment pas trouver ce dont tu as besoin dans Core.