简单的 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;;
我想将一些用 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;;