简单的ocaml代码不起作用

时间:2014-11-12 18:11:06

标签: ocaml

我在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 ++完全不同。

非常感谢

1 个答案:

答案 0 :(得分:3)

你在第三行忘了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 <name> = <expr>
  2. 表达式绑定,可以在其他表达式(包括函数)中发生,它具有let <name> = <expr-1> in <expr-2>的形式,并且它在<name><expr-1>之间创建一个在<expr-2>范围内工作的绑定{1}},其中binding是名称和值之间的关联,scope是代码的词法部分(即<expr-2>占用的代码的一部分)。
  3. 无论如何,用两句话很难解释OCaml,所以考虑阅读由经验丰富的老师写的OCaml书籍,而不是我))