Ocaml实现

时间:2011-03-27 17:45:19

标签: arrays ocaml

我在ocaml中实现数组时遇到了一些问题。例如,当在终端(konsole)和我输入

let tab = Array.make 5 6;

我有

val tab : int array = [|6; 6; 6; 6; 6|]

作为输出。所以它创建了一个长度为5的数组,并用6填充所有的情况。好的,我理解那部分。但是当我在像kate这样的文本编辑器上输入它时,保存并编译它我得到了这个错误:

Error: Unbound value Array.make

我不明白为什么需要Array。 make作为kate中的值,它将Array.make作为终端中的函数。我用“.ml”扩展名保存了文件,然后用ocamlc -o test name_of_file编译它。 有什么建议吗?感谢。

2 个答案:

答案 0 :(得分:5)

我用ocamlc编译了你的程序,并且运行良好(使用OCaml 3.12.0)。

我猜你在尝试编译时调用的是旧版本的编译器,也许是在Array.make仍被命名为Array.create时。也许当您安装新版本时,您覆盖了一些文件(例如顶层)而不是其他文件(例如编译器)。要检查,请比较ocamlc -vocaml给出的版本。

对于消息“Unbound value”,在OCaml中,函数是值。实现者没有区分“不是函数的未绑定值”和“作为函数的未绑定值”,但这不是问题的原因。问题的原因是Array.make完全没有绑定。

答案 1 :(得分:3)

我发现了错误。这是一个非常愚蠢的人。我将文件保存为“array.ml”。所以在编译期间它创建了一个array.cmi文件,我觉得它有点混淆了这个文件和... / lib / ocaml / array.cmi中的文件。我不太确定。所以我将文件重命名为“table.ml”并完美编译。它混淆了这两个文件真是太疯狂了