OCaml表示语句错误

时间:2016-05-08 21:10:22

标签: ocaml

我是OCaml的新手,当我尝试编译我的程序时,它说:

  

错误:语法错误

     

命令退出,代码为2。

在第二个if语句之后出现此错误。我无法弄清楚为什么会这样。

let rec the_last_game (jugadores : jugador list) (length : int) (mazo : string list) : unit =

 if (juego_acabado jugadores mazo) then begin
    let s = ordenar jugadores in
    imprimir_resultado_final s;
 end
 else begin
    let lista = [] in
    for i = 1 to length do
        let jugadorn = at jugadores i in
        let t = elegir (at jugadores i) in
        let jugadorn = remover_carta_jugador jugadorn (second_tupla t) in
        let jugadorn = top mazo jugadorn in
        let mazo = remover_primera mazo in
        if (es_especial (second_tupla t)) then begin
            let x = especiales (jugador , mazo) carta in
            let mazo = dar_mazo x in
            let jugadorn = dar_jugador x in
        end
        let lista = list_append lista jugadorn in
        let s = append_tuplas s t in
    done;
 end
 let y = dar_ganador_ronda(s (auxdar_ganador_ronda s)) in
 imprimir_ganador(s , (auxdar_ganador_ronda s));
 let lista = aux_aumentar_puntuacion lista y in
 the_last_game lista length mazo;;

1 个答案:

答案 0 :(得分:1)

如果出现以下情况,请在第二个附近省略一些细节:

if ... then begin ... end
let lista = ...

所以,这里的第一行是一个表达式(类型为unit),第二行是第二个表达式的开头。如果你想要一个接一个地执行两个表达式,你需要在它们之间加一个分号。

稍后你有

let jugador = ... in
end

这在语法上也是无效的。至少你需要in之后的东西。

一般来说,你需要小心使用看起来像这样的let语句:let var = expr1 in expr2并且你需要在单元表达式之后使用分号来执行它的效果(即,命令式表达)。

我希望这至少可以让你更进一步。 OCaml与足够不同,需要一些人习惯。