从零开始学习 OCaml 的入门概览
Exercism 提供练习和反馈,但对于第一次学习 OCaml 的人来说,可能不太容易上手。以下资源可以帮助你入门:
OCaml 的文档分散在多个项目中,很难查找,因为既有所谓的标准库(编译器自带的、相当精简的库),又有 Core 库(Jane Street 的一个独立项目,旨在提供一个更完整、更一致的标准库)。
令人困惑的是,标准库有时也被称为核心库(不过很少被称为 Core 库)。
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 里真的找不到需要的东西。