OCamlの学び方

OCamlをゼロから始める方法を概観します


Exercismには演習とフィードバックがありますが、OCamlを初めて学ぶ人にとっては、なかなか取りかかりにくいかもしれません。そんなときは、次のリソースから始めるとよいでしょう。

OCamlのドキュメントは複数のプロジェクトに分かれているため、なかなか見つけにくいことがあります。というのも、いわゆる標準ライブラリ(コンパイラーに付属する、かなり最小限のライブラリ)と、Coreライブラリ(Jane Streetによる別のプロジェクトで、より完全で一貫性のある標準ライブラリを提供することを目指しています)の2つがあるからです。

紛らわしいことに、標準ライブラリのことをcoreライブラリと呼ぶこともあります(Coreライブラリと呼ぶことはほとんどありませんが)。

Jane StreetのCoreライブラリは、いくつかの演習で必要になりますが、すべての演習で役立ちます。CoreライブラリはBase、Core_kernel、Coreの3つに分かれており、それぞれが前のものを拡張しています。 ほとんどの演習ではBaseだけで十分ですが、いくつかの演習(たとえば日付を扱う場合)ではCore_kernelが必要です。 Coreを使うには、コードの先頭にopen Baseまたはopen Core_kernelと書きます。

たとえば、Listの代わりに、Baseのシャドーが使えます。(https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/)(open Baseと書くと、これがListという名前で使えるようになります。)

標準ライブラリのListモジュールとCoreのListには、微妙な違いもあれば、そうでもない違いもあります。たとえば、標準ライブラリではList.for_allのシグネチャは次のとおりです。

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

一方、Coreライブラリでは次のようになります。

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

その結果、リスト内のすべての数値が10より小さいかどうかを調べるには、コンパイラーに付属するListモジュールでは次のように書く必要があります。

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

そしてCoreのListモジュールでは、次のように書きます。

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

または(こちらがおすすめです):

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

ひとつアドバイスです。Coreライブラリを中心に学び、Coreで必要なものがどうしても見つからないとき以外は、標準ライブラリは気にしないようにしましょう。