If statement 简单if-then-else中的Ocaml语法错误
我想把一些用C编写的代码改成Ocaml 这是一个C代码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
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:-)