简单的 if-then-else 中的 Ocaml 语法错误

Ocaml syntax error in a simple if-then-else

我想将一些用 C 编写的代码更改为 Ocaml

这是一个C代码

int a, b;
if(m > n)
{
    a = n;
    b = m;
}
else
{
    a = m;
    b = n;
}

我尝试将其更改为 Ocaml,但不知何故,我在第二行遇到了语法错误。

let rec gcd m n =
 if m > n then begin let a = n in; let b = m in end
 else begin let a = m in; let b = n in end

问题是什么,我该如何解决?

你必须明白 let 声明是局部的。即写let variable = assignment in expression时,variable只绑定在expression

的范围内

现在,当您编写 begin let a = n in; let b = m in end 时,不仅您的变量不会绑定到块外,而且编译器仍在等待两个 in 单词之后的表达式。您必须记住,除非您使用 OCaml 的命令式功能,否则您不应该编写 ; 来指示后续计算。

另请注意,每个 let 声明都会创建一个新变量,因此如果您在代码的两个不同位置键入 let a=这是不一样的 。因此,let 必须是 外部 您的 if 语句:

let (a,b) =
 if m > n
 then (n,m)
 else (m,n)
in
the rest of your code

如果你不想,你也可以这样做:

let m=3 and n=4 in

let a=ref 0 and b=ref 0 in
if(m > n)
then
(
    a:=n;
    b:=m;
)
else
(
    a:=m;
    b:=n;
);

Printf.printf "a=%d b=%d\n" !a !b;;