我正在使用调用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
这是我的构建命令:
$ 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.
答案 0 :(得分:9)
Core库取代了标准的OCaml List
模块。当您open Core.Std
使用Core的List
模块掩盖OCaml的标准Core.Std.List
时。 Core.Std.List.assoc
功能不存在。如果您未在utop中打开Core.Std
,那么您很可能仍在使用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
。
答案 1 :(得分:0)