Functional programming OCaml中的分号和嵌套if表达式
嗯,我在OCaml中使用分号(单和双)和嵌套if-else时遇到了问题 比如说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);`?你能把你的答案扩展到描述所有这些的一般规律吗?好的,我现在大致明白了仅在您要与多个表达式相邻时使用。在您的代码或我的
让联合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)