在 OCaml 中调用其他文件中的函数
Calling functions in other files in OCaml
我有 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
那么,如何修改调用者、被调用者、构建命令,将代码编译成可执行文件?
#use
指令仅适用于顶层(解释器)。在编译代码中,您应该使用模块名称:Hello.length
.
我将展示如何从类 Unix 命令行构建程序。您必须根据您的环境进行调整:
$ ocamlc -o call hello.ml call.ml
$ ./call
6
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
我有 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
那么,如何修改调用者、被调用者、构建命令,将代码编译成可执行文件?
#use
指令仅适用于顶层(解释器)。在编译代码中,您应该使用模块名称:Hello.length
.
我将展示如何从类 Unix 命令行构建程序。您必须根据您的环境进行调整:
$ ocamlc -o call hello.ml call.ml
$ ./call
6
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