Cómo aprender OCaml

Una introducción a cómo empezar desde cero con OCaml


Exercism ofrece ejercicios y retroalimentación, pero puede ser difícil empezar para quienes aprenden OCaml por primera vez. Estos recursos pueden ayudarte a empezar:

La documentación de OCaml está repartida entre varios proyectos y puede ser difícil de encontrar, porque existe lo que a veces se llama la biblioteca estándar (la biblioteca bastante mínima que viene con el compilador) y una biblioteca Core (un proyecto aparte de Jane Street que busca ofrecer una biblioteca estándar más completa y consistente).

Lo que puede confundir: a la biblioteca estándar a veces se la llama biblioteca core (aunque rara vez biblioteca Core).

La biblioteca Core de Jane Street es necesaria para algunos ejercicios, pero puede ser útil para todos. Está dividida en tres: Base, Core_kernel y Core, y cada una extiende a la anterior. Base es todo lo que necesitarás para la mayoría de los ejercicios, pero para unos pocos (por ejemplo, al usar fechas, se necesita Core_kernel). Para usar Core, pon open Base o open Core_kernel al inicio de tu código.

Por ejemplo, en lugar de List obtienes una versión sombreada que proviene de Base.(https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/) (open Base hace que esté disponible con el nombre List).

Hay algunas diferencias sutiles y no tan sutiles entre el módulo List de la biblioteca estándar y el List de Core; por ejemplo, en la biblioteca estándar List.for_all tiene la firma

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

mientras que en la biblioteca Core tiene

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

La consecuencia es que, para comprobar si todos los números de una lista son menores que 10, tienes que escribir lo siguiente con el módulo List del núcleo del compilador:

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

y con el módulo List de Core necesitas escribir:

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

o (preferiblemente):

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

Un consejo: concéntrate en la biblioteca Core e ignora la biblioteca estándar, a menos que realmente no encuentres lo que necesitas en Core.