【问题标题】:Calling functions in other files in OCaml在 OCaml 中调用其他文件中的函数
【发布时间】:2015-02-27 03:21:28
【问题描述】:

我有一个带有长度函数的 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

那么,如何修改caller、callee、build命令将代码编译成可执行文件呢?

【问题讨论】:

    标签: ocaml ocamlbuild


    【解决方案1】:

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

    我将展示如何从类 Unix 命令行构建程序。你必须适应你的环境:

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

    【讨论】:

      【解决方案2】:

      你好.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 模块中声明一个模块Hello?它没用而且相当混乱......
      猜你喜欢
      • 2013-10-05
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多