OCaml - For语句中的循环

时间:2009-10-15 05:02:54

标签: for-loop if-statement ocaml

来自Java和C背景,掌握Ocaml的一些概念非常有趣。其中之一是,在for循环中运行/ multiple语句。

let test_method (x:vector list)(vec:vector) = 
    if List.length x != 0 then
          {a=0.;b=0.} (* Return a vector of 0,0 *)
       else 
          for i = 0 to List.length x do
                        let key =  {a=(List.nth x i).a;b=(List.nth x i).b} 
                done;;

我得到的错误已经完成;;是一个意外的令牌。为什么会这样?即使我这样做也会发生这种情况

let test_method (x:vector list)(vec:vector) = 
    if List.length x != 0 then
          {a=0.;b=0.} (* Return a vector of 0,0 *)
       else 
          for i = 0 to List.length x do
                        let key =  {a=(List.nth x i).a;b=(List.nth x i).b} in
                        let value = vec_neg key;
                done;;

其中vec_neg是一种正常工作的方法,可以否定向量类型。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

let表达式必须有一个正文。 (即let var = val in body)(除了让模块顶层的定义,隐式使用模块的其余部分作为正文)let创建一个局部绑定,它位于正文范围内。如果你不使用它(即没有身体),这样做有什么意义?此外,语言中的每个表达式都必须评估为一个值。 let表达式求值为body评估的任何值。这就是它需要一个身体的原因。

答案 1 :(得分:1)

在您撰写let foo = bar之后,您必须先编写in并再写一次“作业”。编译器期望in但遇到done,这是“意外”。

您应该删除let或添加in,具体取决于您的目标。