Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OCaml:如何运行包含库的脚本_Ocaml - Fatal编程技术网

OCaml:如何运行包含库的脚本

OCaml:如何运行包含库的脚本,ocaml,Ocaml,我正在跟随真实世界的OCaml书籍学习OCaml,许多程序都需要使用Jane Street核心库。当我在顶层使用这个核心库中的函数时,它工作得非常好。在这里,我只使用以下命令打开核心库 $ #use "topfind";; #thread;; #camlp4o;; #require "core.top";; #require "core.syntax";; open Core.Std;; 然后我可以在顶层逐行运行这个程序,像String.split这样的函数可以正常工作 # let langu

我正在跟随真实世界的OCaml书籍学习OCaml,许多程序都需要使用Jane Street核心库。当我在顶层使用这个核心库中的函数时,它工作得非常好。在这里,我只使用以下命令打开核心库

$ #use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;
open Core.Std;;
然后我可以在顶层逐行运行这个程序,像String.split这样的函数可以正常工作

# let languages = "OCaml,Perl,C++,C";;
val languages : string = "OCaml,Perl,C++,C"
# let dashed_languages =
let language_list = String.split languages ~on:',' in
String.concat ~sep:"-" language_list
;;
val dashed_languages : string = "OCaml-Perl-C++-C"
但是,如果我把它们都放在一个脚本中,我如何让编译器识别核心库呢?因此,如果我在脚本中运行相同的程序:

open Core.Std;;
open Str;;

let languages = "OCaml,Perl,C++,C";;
let dashed_languages =
    let language_list = String.split languages ~on:',' in
    String.concat ~sep:"-" language_list
;;
然后我编译它:

ocamlopt -o test test.ml
我得到一个错误:

Error: Unbound module Core

所以很明显,核心并没有得到认可。我无法将#use和#require命令放入脚本中,因为OCaml无法识别这些命令。那么我如何使用Core呢

由于您遵循的是真实世界的OCaml,您可能希望使用
corebuild
来编译可执行文件,因为这是本书推荐的。在这种情况下,命令
corebuildtest.native
应该正确编译脚本。如果使用的库不是核心库,则需要使用
-pkg
选项指定它们


另外,请注意,您可以省略
.ml
文件中的双分号。

确保您有ocamlfind。另外,确保您有合适的环境让it查找包。如果安装了opam,请运行“eval
opam config env
”。然后:


可能重复:@clcto我在那个答案中推荐了ocamlscript,但我会在这里提供另一个答案。
ocamlfind ocamlopt -linkpkg -thread -package core test.ml -o test