OCaml的语法陷阱:多让使用分离器(OCaml syntax trap: multiple let

2019-10-20 06:59发布

我试图教我OCaml的。 我已经在这一个语法陷阱将坚果。 有人告诉我,你可以字符串表达式一起按顺序使用“;” 也就是说,表达式1; 表达式2执行第一EXPR,则第二,如所预期。 出于某种原因,我无法解释有以下输入同意

let x = 5 ; let y = 7;;

奇怪的是,如果只有第一expr是一让,它的工作原理。 所以

let x = 5 ; 7;;

通行证,并评估为7更糟的是,如果我尝试使用括号组成的语句的多个序列,其中让利至上,它仍然无法正常工作。 IE:

let x = 5 ; (let y = 7 ; 9);;

是错误的,即使它是由只有在让是第一个表达序列。 有人能解释如何得到这个工作?

Answer 1:

看问题的一种方法是, let x = 5不是表达式。 这是一个顶级声明; 即,它声明的名称x有一个值5。

; 操作适用于组合表达式,而不是声明。

你并不需要串声明连同; 。 你可以把一个接一个:

# let x = 5 let y = 7;;
val x : int = 5
val y : int = 7
# 

有一个完全不同的使用的let在OCaml中是表达式的一部分。 在这种情况下,它随后in

# (let x = 4 in x + 1);;
- : int = 5

由于这是一种表达,你可以将若干个他们一起;

# (let x = 4 in x + 1); (let y = 6 in y + 1);;
Warning 10: this expression should have type unit.
- : int = 7

然而,由于编译器警告你,这不是成语串起来任意表达式。 通常情况下,你使用; 有必要的代码。 随着功能的代码,它没有任何意义。 所以编译器期望所有,但最后一个表达式有型unit (这是用于必要的代码,做一些有用的东西,但不会返回一个有用的值)。



文章来源: OCaml syntax trap: multiple lets using separators
标签: ocaml