let x = 2;;
let x = 3
in let y = x +1
in x + 1;;
let x = 3 and y = x + 1
in x + y;;
结果分别按每个表达式排序:
val x : int = 2
- : int = 7
- : int = 6
你能帮我理解为什么最后一个表达式等于6吗,我很难理解。
我在 tryOCamlpro 中运行此代码。
第一个是不言自明的。
第二个应该警告您
y
未使用。 x
是 3
,所以 x + 1
是 4
。您观察到的结果 7
表明您向我们展示的代码实际上并不是您评估的代码。
对于第三个,让我们尝试一些不同的东西:
# let x = 3 and y = x + 1
in (x, y);;
- : int * int = (3, 3)
呵呵。让我们启动一个干净的解释器环境并尝试一下:
# let x = 3 and y = x + 1 in (x, y);;
Error: Unbound value x
从中我们可以看到,
y
的定义并没有使用x
定义为3
,而是使用previous将x
定义为2
。
您可能想要:
# let x = 3 in
let y = x + 1 in
x + y;;
- : int = 7
let ... and ...
或 let ... and ... in ...
结构实际上只对相互递归函数有用。