构建使用列表理解的 OCaml 代码

Building OCaml code that uses list comprehension

从这个 SO 问题:List Comprehension in Ocaml?,我可以使用 opam install pa_comprehension 安装理解包,并在顶层 REPL 中使用该包。

# #require "pa_comprehension";;
# open Batteries;;
# [? 2 * x | x <- 0 -- max_int ; x * x > 3 ?];;
- : int Batteries.Enum.t = <abstr>

那么,我该如何编译代码呢?

不幸的是,由于 pa_comprehension 包名称没有以 .syntax 扩展名结尾,这比它应该做的要难一些。 (这个问题仍然没有解决的事实表明,使用 pa_comprehension 在现代 OCaml 中不是很流行)。因此,如果没有适当的扩展,我们需要手动完成所有操作。如果您的文件名为 pr.ml,那么正确的调用是:

$ ocamlbuild -use-ocamlfind -syntax camlp4o -pkg camlp4,pa_comprehension pr.native

如果不想每次都输入,可以创建_tags文件,内容如下:

$ cat _tags
<**/*> : package(camlp4),syntax(camlp4o),package(pa_comprehension)

那样的话,命令行拼写就简单一点了:

$ ocamlbuild -use-ocamlfind pr.native