在OCaml中调用其他文件中的函数

时间:2015-02-27 03:21:28

标签: ocaml ocamlbuild

我有hello.ml,它有一个长度函数:

let rec length l = 
    match l with
        [] -> 0
    | h::t -> 1 + length t ;;

使用函数的call.ml:

#use "hello.ml" ;; 

print_int (length [1;2;4;5;6;7]) ;;

在解释器模式(ocaml)中,我可以使用ocaml call.ml来获取结果,但是当我尝试使用ocamlc或ocamlbuild编译它时,我遇到了编译错误。

File "call.ml", line 1, characters 0-1:
Error: Syntax error

然后,如何修改调用者,被调用者和构建命令以将代码编译成可执行文件?

2 个答案:

答案 0 :(得分:3)

#use指令仅适用于顶层(解释器)。在编译的代码中,您应该使用模块名称:Hello.length

我将展示如何从类Unix命令行构建程序。您必须根据您的环境进行调整:

$ ocamlc -o call hello.ml call.ml
$ ./call
6

答案 1 :(得分:3)

hello.ml

let rec length l = 
    match l with
        [] -> 0
    | h::t -> 1 + length t ;;

call.ml

open Hello

let () = print_int (Hello.length [1;2;4;5;6;7]) ;;

构建

ocamlc -o h hello.ml call.ml   

ocamlbuild call.native