【发布时间】:2019-10-14 05:25:27
【问题描述】:
这个问题详细阐述了OCaml syntax trap: multiple lets using separators。
就编程命令式 OCaml 而言,如何在单个 let ... in 之前运行多个 let 语句而不将所有声明更改为表达式?
例如,
let f x = x + 1
let g x = x + 2
let h x = x + 3
编译没有问题,但是
let f x = x + 1
let g x = x + 2
let h x = x + 3 in (Printf.printf "%d \n" (f (h (g 3))) ; ())
不起作用,因为前两个是声明,而最后一个是表达式。同样的观察也适用于变量。纠正此错误的一种方法是将前两个lets 嵌套更改为表达式并嵌套let...in。然而,这似乎相当乏味和尴尬:
let f x = x + 1 in
let g x = x + 2 in
let h x = x + 3 in (Printf.printf "%d \n" (f (h (g 3))) ; ())
或者,可以设想一个长 OCaml 源代码文件,以多个全局变量的 let 声明开头,中间有一个 let...in 表达式。在这种情况下,似乎需要 ;; 来终止顶部的声明,以便 let... in 工作,但文档建议不要使用 ;;。
还有其他写法吗(更优雅)?
【问题讨论】: