3

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

让 test_method (x:vector list)(vec:vector) =
    如果 List.length x != 0 那么
          {a=0.;b=0.} (* 返回 0,0 的向量 *)
       别的
          for i = 0 to List.length x do
                        让键 = {a=(List.nth xi).a;b=(List.nth xi).b}
                完毕;;

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

让 test_method (x:vector list)(vec:vector) =
    如果 List.length x != 0 那么
          {a=0.;b=0.} (* 返回 0,0 的向量 *)
       别的
          for i = 0 to List.length x do
                        让键 = {a=(List.nth xi).a;b=(List.nth xi).b} in
                        让值 = vec_neg 键;
                完毕;;

其中 vec_neg 是一种可以很好地否定向量类型的方法。

任何帮助将不胜感激。

4

2 回答 2

3

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

于 2009-10-15T06:39:24.253 回答
1

在你写完之后let foo = bar,你必须接着写,然后in再写一个“作业”。编译器期望in但遇到done“意外”。

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

于 2009-10-15T05:31:46.590 回答