從零開始學 OCaml 的入門總覽。
Exercism 提供練習和回饋,但對第一次學 OCaml 的人來說,可能不太容易上手。以下這些資源可以幫助你入門:
OCaml 的說明文件散落在多個專案中,因此並不好找,因為其中有時被稱為標準函式庫的函式庫(也就是編譯器隨附、相當精簡的那個函式庫),還有一個 Core 函式庫(Jane Street 的獨立專案,目標是提供更完整、更一致的標準函式庫)。
容易搞混的是,標準函式庫有時也被稱為 core library(不過很少被寫成 Core library)。
Jane Street 的 Core 函式庫是少數練習必備的,但對所有練習都很有用。它分成三個部分:Base、Core_kernel 和 Core,每一層都擴充前一層。
大部分練習你只需要 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 裡真的找不到需要的東西。