Ocaml实现

mka*_*kab 7 arrays ocaml

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

let tab = Array.make 5 6;
Run Code Online (Sandbox Code Playgroud)

我有

val tab : int array = [|6; 6; 6; 6; 6|]
Run Code Online (Sandbox Code Playgroud)

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

Error: Unbound value Array.make
Run Code Online (Sandbox Code Playgroud)

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

Pas*_*uoq 5

我编译了你的程序,ocamlc它很好(使用OCaml 3.12.0).

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

至于消息"Unbound value",在OCaml中,函数是值.实现者没有区分"不是函数的未绑定值"和"作为函数的未绑定值",但这不是问题的原因.问题的原因是Array.make根本没有约束.

  • @mktab编译器找不到文件.../lib/ocaml/array.cmi.也许它丢失了,或者你的发行版的软件包是通过复制目的地而不是编译器配置为安装的目的地来准备不当的.如果是这种情况,你可以使用选项-I和-L修复它,但是我建议从源代码重新编译OCaml. (2认同)