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

标签 ocaml

我正在遵循 Real World OCaml 书来学习 OCaml,许多程序需要使用 Jane Street Core 库。当我在顶层使用这个核心库中的函数时,它工作得很好。在那里,我只使用以下命令打开 Core 库。

$ #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

很明显,Core 没有被认可。我无法将 #use 和 #require 命令放入我的脚本中,因为 OCaml 无法识别这些命令。那么我如何使用Core?

最佳答案

由于您正在关注真实世界的 OCaml,您可能需要使用 corebuild编译可执行文件,因为这是本书推荐的。在这种情况下,命令 corebuild test.native应该正确编译您的脚本。如果您使用 Core 以外的库,则需要使用 -pkg 指定它们。选项。

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

关于OCaml:如何运行包含库的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20765452/

相关文章:

ocaml - 如何呈现 big_int?

exception - 在 OCaml 中打破循环

interop - 是否可以在嵌入模式下使用 OCaml?

list - 如何使用 List.map 在 int list 列表上应用函数?

c - OCaml:链接 C 和 OCaml 的问题

ocaml - Lwt_io.read_int 的正确用法是什么?

syntax - "open!"是什么意思?

ocaml - 我们可以在ocaml中定义一个参数为0的函数吗?

exception - 如何在 Ocaml 的 float 类型中表示空值

haskell - `get` 在 CPS 版本的 State monad 中是如何工作的?