编写 main() 来调用一个函数

writing main() to call a function

我有一个 OCaml 函数可以将字符串转换为数组。编写 "main" 函数来调用它并打印数组的规范方法是什么。

let createArray pattern patArray  =
    (* some unimportant way of setting all the elements in the array patArray
       based on the string pattern *)


let main () =
    let pattern =  "Pattern" in
        let patArray = Array.create (String.length pattern) 0 in
            let res = createArray pattern patArray in
                Array.iter ~f:(printf "%d ") patArray;;  <------------------

main ()

1) 在上面,如果我省略了 ';;' , 这是行不通的。这有什么意义?

2) 除了使用虚拟绑定 "res" 之外,我能否以某种方式编写两个顺序执行的语句,如下所示:

createArray pattern patArray
Array.iter ~f:(printf "%d ") patArray

如果没有 ;;,解析器无法知道该行后面的 main () 调用应该是一个独立的表达式(这里的空格不重要)。

您可以改用以下成语:

let main () = ...
let () = main ()

let () = expr 习语将在该点评估类型 unit 的表达式。初始 let 通知解析器新的顶级 let 构造开始。使用 ;; 是另一种告诉解析器顶级结构结束的方法,但主要用于交互使用。

为了按顺序计算两个表达式,请用分号分隔它们(如果您不确定优先规则,请使用括号或 begin ... end)。例如:

let patArray = Array.create (String.length pattern) 0 in
  createArray pattern patArray;
  Array.iter ~f:(printf "%d ") patArray

或者,使用 beginend 使优先级更清楚:

let patArray = Array.create (String.length pattern) 0 in begin
  createArray pattern patArray;
  Array.iter ~f:(printf "%d ") patArray
end

如果没有 ;,解析器将不知道下一行的 Array.iter 是否应该是 createArray 调用的附加参数。