2

OCaml を初めて勉強していますが、非常にあいまいな「構文エラー」で少し困っています。generateboxes関数を次のように定義する場合:

let rec generateboxes a b = 
    if a = (add1 b) then (force_newline ()); (print_sting "Done!")
    else if [1] = (Array.get finalarray a) then (populatebox
    (numbertoposition a) a); (generateboxes (add1 a) b)
    else (generateboxes (add1 a) b);;

コンパイラは「構文エラー」というエラー メッセージを表示し、最初のelse. そのようなメッセージを出力するために、私のコードに明らかに間違っていることはありますか? (コードが文脈から外れていることは認識していますが、構文エラーであれば問題ありません)。

4

1 に答える 1

8
let rec generateboxes a b = 
    if a = add1 b then (force_newline (); print_sting "Done!")
    else if [1] = Array.get finalarray a then
      (populatebox (numbertoposition a) a; generateboxes (add1 a) b)
    else generateboxes (add1 a) b;;

thenaまたは句に複数のステートメントがある場合はelse、それらを括弧で囲む必要があります。begin ... endまたは、それらを回避することもできます。

let rec generateboxes a b = 
    if a = add1 b
    then begin
      force_newline ();
      print_sting "Done!" end
    else if [1] = Array.get finalarray a
    then begin
      populatebox (numbertoposition a) a;
      generateboxes (add1 a) b end
    else generateboxes (add1 a) b;;

(コードをわかりやすくするために、不要な括弧もいくつか削除したことに注意してください。)

于 2012-10-28T19:01:04.607 に答える