3

Java と C のバックグラウンドを持っているため、Ocaml のいくつかの概念を理解することは非常に興味深いものでした。その 1 つは、/multiple ステートメントを for ループ内で実行することです。

let test_method (x:ベクトル リスト)(vec:ベクトル) =
    List.length x != 0 の場合
          {a=0.;b=0.} (* 0,0 のベクトルを返す *)
       そうしないと
          for i = 0 to List.length x do
                        let key = {a=(List.nth xi).a;b=(List.nth xi).b}
                終わり;;

私が得るエラーは完了です;; は予期しないトークンです。なぜこうなった?これは私がこれをしても起こります

let test_method (x:ベクトル リスト)(vec:ベクトル) =
    List.length x != 0 の場合
          {a=0.;b=0.} (* 0,0 のベクトルを返す *)
       そうしないと
          for i = 0 to List.length x do
                        let key = {a=(List.nth xi).a;b=(List.nth xi).b} in
                        let 値 = 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もう1つ「課題」を書かなければなりません。コンパイラは期待していますが、「予期しない」である にin遭遇しました。done

目的に応じて、を削除letまたは追加する必要があります。in

于 2009-10-15T05:31:46.590 に答える