gpt4 book ai didi

functional-programming - 如何理解 "body of the let"?

转载 作者:行者123 更新时间:2023-12-05 01:16:04 26 4
gpt4 key购买 nike

我在学习 Jason Hickey's Introduction to Objective Caml .只是有一个关于表达的问题。

所以它说:
Definitions using let can also be nested using the in form.let identifier = expression1 in expression2
The expression expression2 is called the body of the let. The variable named identifier
is defined as the value of expression1 within the body. The identifier is defined only in
the body expression2 and not expression1.
A let with a body is an expression; the value of a let expression is the value of
the body.

let x = 1 in
let y = 2 in
x + y;;


let z =
let x = 1 in
let y = 2 in
x + y;;
val z : int = 3
好的。我对上述陈述不太了解。

第一的
The variable named identifier
is defined as the value of expression1 within the body. The identifier is defined only in
the body expression2 and not expression1.

这是什么意思?所以 identifierthe value of expression1 ,但仅限于 body expression2 ?是否意味着 identifier仅在 expression2 中有效但其值为 expression1 ?然后定义 identifier有道理,因为它只在 expression2 中?

第二

让我们看看这个例子:
let x = 1 in
let y = 2 in
x + y;;

所以我不明白这个 let 的意义陈述。 x = 1当然,给出 let y=2 in x+y;; 的主体有什么意义? ?

第三

让 z =
让 x = 1
让 y = 2 in
x + y;;

那么如何理清这句话的逻辑呢?

如果采用这种定义形式: let identifier = expression1 in expression2
什么是 expression1let上面的说法?是吗 let x = 1 ?

谁能告诉我nesting let的逻辑在一种 Java道路?或更容易理解的方式?

最佳答案

What does this mean? So identifier is the value of expression1, but only in the body expression2? Does it mean that identifier is effective only in expression2, but has the value of expression1?



是的。当我这样做时 let x = 42 in x+x ,然后 x具有值 42在表达式 x+x 中,但是 xlet 之外没有任何值表达。因此,如果您在解释器中键入以下内容:
let x = 42 in x+x;;
x*2;;
x+x的结果将是 84 ,但 x*2 的结果将是一个错误,因为 x未在该范围内定义。

Then does defining identifier make sense, as it is only in expression2?



当然,为什么不呢?我的意思是在这个特定的例子中 x被定义为单个数字,它可能没有多大意义,但在现实世界的场景中,它可能是一个更大的表达式,并且不必多次重复它成为一个很大的优势。

还有 expression1可能有您只想执行一次的副作用(例如,如果您想将用户输入分配给一个变量)。

So I don't see the point of this let statement. x = 1 for sure, what's the point of giving a body of let y=2 in x+y;;?



你的意思是:为什么不直接写 1+2 ?同样,在现实世界的场景中,您将拥有更复杂的表达式,并且您不希望将它们全部放在一行中。还为值命名通常会增加可读性(尽管在本示例中并非如此)。

let z = let x = 1 in let y = 2 in x + y;;

What's the expression1 in the let statement above? Is it let x = 1?



这里 let z = ...let语句,即它定义了名称 z全局范围内,没有 body 。所以第一个 = 右边的整个表达式是 z 的值.对于 let x = ... in ...位, 1expression1let y = 2 in x+yexpression2 .而对于 y 2expression1x+yexpression2 .

关于functional-programming - 如何理解 "body of the let"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com