我不明白为什么最后一条语句的结果是6

问题描述 投票:0回答:1
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 中运行此代码。

ocaml
1个回答
1
投票

第一个是不言自明的。

第二个应该警告您

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 ...
结构实际上只对相互递归函数有用。

© www.soinside.com 2019 - 2024. All rights reserved.