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

If statement 简单if-then-else中的Ocaml语法错误,if-statement,syntax-error,ocaml,let,If Statement,Syntax Error,Ocaml,Let,我想把一些用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

我想把一些用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
时,
variable
仅绑定在
expression


现在当你写
开始时,让a=n进入;让b=m在end
中,不仅您的变量不会绑定到块外,而且编译器仍在等待
中的
字后面的表达式。您必须记住,除非您使用的是OCaml的命令式功能,
不是您应该编写以指示后续计算的内容

还要注意,每个
let
声明都将创建一个新变量,因此如果在代码的两个不同位置键入
let a=
这与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;;

问题在于
让a=n进入
,而不是
,如果
“除非您使用的是OCaml的命令式功能,否则您永远不应该编写它。”列表文字和记录除外。:-)@sepp2k:-)