命令式代码中的语法错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了命令式代码中的语法错误相关的知识,希望对你有一定的参考价值。

exception Error of (string);;
let v = ref true;;
let e = Error("Fail");;
let h = ref false;;
while !h <> true do
  let x = read_int();
  let y = read_int();
  try
    let res = x / y in
    Printf.printf "result = %d" res;
    h := true;
  with
    Division_by_zero -> raise e
done;;

返回“done ;;”行中的语法错误,但我不知道为什么。

答案
let x = read_int();

是一个顶级的定义,而不是一个表达。表达形式将是

let x = read_int() in ...

更一般地说,你似乎非常大量地模仿一种强制性的类似Algol的风格,这种风格大多会让你感到困惑并导致很多痛苦。您应该尝试编写没有可变性的代码,分号(在OCaml中是“序列运算符”,而不是行/语句终止符)和命令式迭代。

您可能还会发现类似javascriptReasonML syntax更熟悉且更容易处理,但它当然是另一件事,设置和OCaml学习资源必须翻译,所以可能不值得额外的麻烦。

另一答案

我强烈建议患有OCaml语法错误的人使用适当的缩进工具,例如ocp-indent并尝试缩进代码行。从自动缩进结果中,当代码与您的意图不同时,您通常可以找到正确的问题所在:

exception Error of (string);;
let v = ref true;;
let e = Error("Fail");;
let h = ref false;;
while !h <> true do
  let x = read_int();
    let y = read_int();  (* <= this is still in the definition of x *)
      try
        let res = x / y in
        Printf.printf "result = %d" res;
        h := true;
      with
        Division_by_zero -> raise e
done;;

以上是关于命令式代码中的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

命令式代码中的语法错误

php代码中的错误mysql更新命令

如何仅从命令行检查 JavaScript 代码的语法错误?

需要帮助查找 SQL 代码中的语法错误 [关闭]

如何更正命令生成器中的语法错误? [复制]

如何创建片段以重复变量编号中的代码行