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;;

then如果一个或一个子句中有多个语句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 回答