Functional programming 如何理解;出租房屋的主体;?
我在学习。只是有一个关于表达的问题Functional programming 如何理解;出租房屋的主体;?,functional-programming,ocaml,Functional Programming,Ocaml,我在学习。只是有一个关于表达的问题 所以它说: 使用let的定义也可以使用in表单嵌套。 let identifier=expression2中的expression1 表达式expression2称为let的主体。名为identifier的变量 定义为主体中表达式1的值。标识符仅在中定义 正文表达式2和非表达式1。 带主体的let是一个表达式;let表达式的值是 车身。 let x = 1 in let y = 2 in x + y;; let z =
所以它说:
使用let的定义也可以使用in表单嵌套。
let identifier=expression2中的expression1
表达式expression2称为let的主体。名为identifier的变量
定义为主体中表达式1的值。标识符仅在中定义
正文表达式2和非表达式1。
带主体的let是一个表达式;let表达式的值是
车身。
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
嗯。我不太明白上面的说法 弗斯特
名为identifier的变量
定义为主体中表达式1的值。标识符仅在中定义
正文表达式2和非表达式1。
这是什么意思?所以标识符
是表达式1
的值,但仅在主体表达式2
中?这是否意味着identifier
仅在expression2
中有效,但其值为expression1
?那么定义标识符
有意义吗,因为它只存在于表达式2中
第二
让我们来看一个例子:
let x = 1 in
let y = 2 in
x + y;;
所以我看不出这个let
语句的意义x=1
当然,给出一个体,让y=2在x+y;,有什么意义代码>
第三
让z=
设x=1英寸
设y=2英寸
x+y
那么我怎样才能理清这句话的逻辑呢
如果采用此定义形式:let identifier=expression2中的expression1
上面的let
语句中的expression1
是什么?是不是让x=1
有谁能以Java
的方式告诉我嵌套let
的逻辑吗?还是更容易理解的方式?
这是什么意思?所以identifier是expression1的值,但是
只是在身体表情上?这是否意味着标识符是正确的
仅在表达式2中有效,但表达式1的值是否为?然后
定义标识符有意义吗,因为它只存在于表达式2中
这就是它的意思,是的,但更简单地说,它意味着您不能“在其自身的值中”使用标识符。将expression1的值绑定到标识符后,可以在expression2中使用标识符而不是整个expression1
通常,使用绑定有两个原因;1是为了防止对给定表达式进行多次求值,2是为了清楚起见:为相对复杂的表达式的值指定一个人类可读的名称通常很有用
就Java而言,let绑定大致相当于一个局部变量
这是什么意思?标识符是expression1的值,但只在主体expression2中?这是否意味着标识符仅在表达式2中有效,但其值为表达式1
对。当我在x+x中设置x=42时,那么x
在表达式x+x
中具有值42
,但是x
在let
表达式之外没有任何值。因此,如果您在解释器中键入类似的内容:
let x = 42 in x+x;;
x*2;;
x+x
的结果将是84
,但x*2
的结果将是错误的,因为x
未在该范围内定义
那么定义标识符有意义吗,因为它只在表达式2中存在
当然,为什么不呢?我的意思是,在这个特定的例子中,x
被定义为一个单一的数字,它可能没有多大意义,但在现实世界中,它可能是一个更大的表达式,不必重复多次就成了一大优势
另外,expression1
可能有副作用,您只想执行一次(例如,如果您想将用户输入分配给变量)
所以我不明白这句话的意义。x=1当然,在x+y;;中给出一个y=2的体有什么意义
你的意思是:为什么不直接写1+2
?同样,在现实世界中,你会有更复杂的表达式,你不希望它们都在一行上。另外,为值命名通常会增加可读性(尽管在本例中并非如此)
设z=设x=1 in设y=2 in x+y
上面let语句中的表达式是什么?是让x=1吗
这里的let z=…
是一个let
语句,即它全局定义名称z
,没有正文。因此,第一个=
右侧的整个表达式是z
的值。对于让x=。。。在…
位中,1
是表达式1
,让x+y中的y=2
是表达式2
。对于y
2
是表达式1
,x+y
是表达式2AC
语句序列x=1;y=2;返回x+y
被翻译成ML让x=1 in y=2 in x+y
。记住,ML中没有语句,一切都是一个表达式。逻辑非常简单——把让x=y在z
中看作(fun x->z)y
的语法糖让
s只是在主体范围内定义值的方法。所以如果我说让x=12
,然后定义x
,我以后可以在任何地方使用它。如果我说x+x'中的x=12,那么定义了
x',并且只能在x+x
中使用,对吗?谢谢。那么,关于示例的z
部分,真正重要的部分是后面的x+y
。对于let z
没有let体
,整个let x=1 in let y=2 in x+y
是一个表达式。我说得对吗?谢谢你。s