我正在使用调用List.assoc的函数编译一个模块,它无法构建给我"Unbound value List.assoc"...我已经尝试了其他List函数并且它们工作正常,它在utop中也可以正常工作.
我可以通过使用corebuild和此代码编译ml文件来重现这一点
open Core.Std
let p = [(1,2);(2,3);(3,4)]
in List.assoc 2 p
Run Code Online (Sandbox Code Playgroud)
这是我的构建命令:
$ corebuild blah.byte + ocamlfind ocamlc -c -w A-4-33-40-41-42-43-34-44 -strict-sequence -g -bin-annot -short-paths -thread -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -o blah.cmo blah.ml
File "blah.ml", line 5, characters 3-13: Error: Unbound value List.assoc Command exited with code 2.
Run Code Online (Sandbox Code Playgroud)
Core库取代了标准的OCaml List
模块.当你用Core的模块open Core.Std
掩盖OCaml的标准List
时Core.Std.List
.该Core.Std.List.assoc
功能不存在.如果您没有Core.Std
在utop中打开,那么您很可能仍在使用OCaml的标准库List
模块.
Core确实提供了此功能的替代品List.Assoc
.你可以在这里看到一些文档:https://ocaml.janestreet.com/ocaml-core/latest/doc/core_kernel.112.17.00/_build/lib/core_list/#/module : Assoc
List.Assoc.find_exn
看起来它是stdlib的替代品List.assoc
.