【问题标题】:Simple ocaml code didn't work简单的 ocaml 代码不起作用
【发布时间】:2023-04-05 05:33:01
【问题描述】:

我在 Ocaml 中有一个简单的代码,描述如下:

for i = 1 to 9 do
  for j = 1 to 9 do
    let k = i*10+j
    Format. printf "(define x%d :: int)@." k
  done;
  print_newline ()
done

但是会导致语法错误,不知道为什么:

File "main.ml", line 5, characters 2-6: Error: Syntax error --> Line 5: done;

请帮我解决它并推荐一本好书来学习 Ocaml。我是新手,对里面的一切都很困惑。 Ocaml 与 C++ 完全不同。

非常感谢

【问题讨论】:

  • 定义“没用”
  • 文件“main.ml”,第 5 行,字符 2-6:错误:语法错误 --> 第 5 行:完成;

标签: ocaml


【解决方案1】:

你忘记了第三行的in

你可以找到很多关于 OCaml 的资源,包括好书here

更新

for i = 1 to 9 do
  for j = 1 to 9 do
    let k = i * 10 + j in (* <- syntax requires you to put `in` here *)
    Format.printf "(define x%d :: int)@." k
  done;
  print_newline ()
done

OCaml 中有两种 let 绑定:

  1. 顶层绑定,可以发生在模块定义和顶层内部,它的形式为let &lt;name&gt; = &lt;expr&gt;
  2. 表达式绑定,可以出现在其他表达式中,包括函数,它的形式为let &lt;name&gt; = &lt;expr-1&gt; in &lt;expr-2&gt;,它在&lt;name&gt;&lt;expr-1&gt;之间创建了一个在&lt;expr-2&gt;范围内工作的绑定,其中绑定是名称和值之间的关联,作用域是代码的词法部分(即被&lt;expr-2&gt; 占用的代码部分)。

无论如何,OCaml 很难用两句话来解释,所以考虑阅读 OCaml 书籍,这些书籍是由比我更有经验的老师写的))

【讨论】:

  • 对不起,我不明白。你能帮我修一下吗?
  • 我已经详细说明了答案,希望这会有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多