我是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;;
答案 0 :(得分:1)
如果出现以下情况,请在第二个附近省略一些细节:
if ... then begin ... end
let lista = ...
所以,这里的第一行是一个表达式(类型为unit),第二行是第二个表达式的开头。如果你想要一个接一个地执行两个表达式,你需要在它们之间加一个分号。
稍后你有
let jugador = ... in
end
这在语法上也是无效的。至少你需要in
之后的东西。
一般来说,你需要小心使用看起来像这样的let
语句:let var = expr1 in expr2
并且你需要在单元表达式之后使用分号来执行它的效果(即,命令式表达)。
我希望这至少可以让你更进一步。 OCaml与足够不同,需要一些人习惯。