Я пытаюсь переписать код C в OCaml.Однако я не уверен, как работать с множественными условиями if внутри цикла for в OCaml.Можете ли вы помочь мне понять, как это сделать?У меня есть код C и то, что я сделал в OCaml, который не работает.
Код C:
bool function1 (int x, int y, int movei, int sol[][], int xMove[], int yMove[], int n)
{
int i, next_x, next_y;
if (movei == n)
return true;
for (i = 0; i < n; i++) {
next_x = x + xMove[i];
next_y = y + yMove[i];
if (function2(next_x, next_y, sol)) {
sol[next_x][next_y] = movei;
if (function1(next_x, next_y, movei + 1, sol, xMove, yMove, n))
return true;
else
sol[next_x][next_y] = 0;
}
}
return false;
}
РЕДАКТИРОВАТЬ: OCamlcode
Я изменил свой код OCaml, основываясь на ответе glennsl, но компилятор жалуется на то, что '(' и ')' не соответствует и ожидается.
let rec function1 x y movei sol xMove yMove n =
if movei=n then true
else
(
for i=0 to n-1 do
(
let next_x = x + xMove.(i) in
let next_y = y + yMove.(i) in
if (function2 next_x next_y sol) then
sol.(next_x).(next_y)<-movei in
(
if (function1 next_x next_y movei+1 sol xMove yMove n) then true
else sol.(next_x).(next_y)<-0
)
else false
done;; )
)
Предыдущий код OCaml:
let rec function1 x y movei sol xMove yMove n =
if movei=n then true
else
for i=0 to n-1 do
let next_x = x + xMove.(i);
let next_y = y + yMove.(i);
if (function2 next_x next_y sol) then
sol.(next_x).(next_y)<-movei;
if (function1 next_x next_y movei+1 sol xMove yMove n) then true
else sol.(next_x).(next_y)<-0
else ()
done;;
Компилятор сообщает «Синтаксическая ошибка» в последней строке кода OCaml, где done ;; равно.