构建使用列表理解的 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
从这个 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