Functional programming OCaml中的分号和嵌套if表达式

Functional programming OCaml中的分号和嵌套if表达式,functional-programming,ocaml,Functional Programming,Ocaml,嗯,我在OCaml中使用分号(单和双)和嵌套if-else时遇到了问题 比如说 让联合u p q= 让rec联合id_ary i= 如果i之间的表达式。。。末端应具有类型装置。分号是let()=。。。在中。因此,是分离if表达式和unionfy表达式所必需的。您能在这里查看我的另一个代码吗?为什么我们不需要在“打印数组id数组0之后,但我们需要一个用于联合id数组(i+1);`?你能把你的答案扩展到描述所有这些的一般规律吗?好的,我现在大致明白了仅在您要与多个表达式相邻时使用。在您的代码或我的

嗯,我在OCaml中使用分号(单和双)和嵌套if-else时遇到了问题

比如说


让联合u p q=
让rec联合id_ary i=
如果i问题是
end
。在这种情况下,整个
if
表达式应该返回
unit
,因此表达式末尾需要一个分号。另一个
end
不需要它,因为
if
表达式继续使用
else
子句。下面,我删除了不必要的分号并添加了剩余的分号

let union u p q = 
  let rec unionfy id_ary i =
    if i < Array.length id_ary then begin 
      if id_ary.(i) = p then begin 
        id_ary.(i) <- id_ary.(q);
        print_array id_ary 0
      end;
      unionfy id_ary (i + 1)
    end 
    else print_string "end of union"
  in
  unionfy u.id_ary 0;;

问题是
end
。在这种情况下,整个
if
表达式应该返回
unit
,因此表达式末尾需要一个分号。另一个
end
不需要它,因为
if
表达式继续使用
else
子句。下面,我删除了不必要的分号并添加了剩余的分号

let union u p q = 
  let rec unionfy id_ary i =
    if i < Array.length id_ary then begin 
      if id_ary.(i) = p then begin 
        id_ary.(i) <- id_ary.(q);
        print_array id_ary 0
      end;
      unionfy id_ary (i + 1)
    end 
    else print_string "end of union"
  in
  unionfy u.id_ary 0;;

为什么我们不需要
在“打印数组id数组0
之后,但我们需要一个用于联合id数组(i+1);`?你能把你的答案扩展到描述所有这些的一般规律吗?好的,我现在大致明白了<代码>仅在您要与多个表达式相邻时使用。在您的代码或我的代码中,最内部的
if begin end
实际上是一个表达式,与
unionfy id_ary(i+1)
一起,它们是两个相邻的表达式,位于第一个
if begin end
中。我说得对吗?因为打印数组正在返回
unit
begin>之间的表达式。。。末端
应具有类型
装置
。分号是
let()=。。。在
中。因此,
是分离
if
表达式和
unionfy
表达式所必需的。您能在这里查看我的另一个代码吗?为什么我们不需要
在“打印数组id数组0
之后,但我们需要一个用于联合id数组(i+1);`?你能把你的答案扩展到描述所有这些的一般规律吗?好的,我现在大致明白了<代码>仅在您要与多个表达式相邻时使用。在您的代码或我的代码中,最内部的
if begin end
实际上是一个表达式,与
unionfy id_ary(i+1)
一起,它们是两个相邻的表达式,位于第一个
if begin end
中。我说得对吗?因为打印数组正在返回
unit
begin>之间的表达式。。。末端
应具有类型
装置
。分号是
let()=。。。在
中。因此,
是分离
if
表达式和
unionfy
表达式所必需的。您能在这里查看我的另一个代码吗?
  if id_ary.(i) = p then begin ... end;
  unionfy id_ary (i + 1)