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

时间:2017-02-24 16:05:14

标签: 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 in end

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

2 个答案:

答案 0 :(得分:7)

你必须明白,让声明是本地的。也就是说,当您撰写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

答案 1 :(得分:1)

如果你不想,你可以做同样的事情:

using MinusString