OCaml 未绑定值 List.assoc

OCaml Unbound value List.assoc

我正在编译一个带有调用 List.assoc 函数的模块,它无法构建给我 "Unbound value List.assoc" ...我已经尝试了其他列表函数,它们工作正常,它也在 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.

核心库取代了标准的 OCaml List 模块。当你 open Core.Std 时,你用 Core 的 Core.Std.List 模块屏蔽了 OCaml 的标准 ListCore.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 看起来像是标准库的 List.assoc.

的替代品

API已更改为:

List.assoc 1 p 

看这个: http://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html