Привет, ребята, я пытаюсь создать простой рекурсивный метод, который просто принимает аккумулятор и целевое значение. Затем добавьте единицу в аккумулятор, пока она не достигнет целевого значения. Я новичок в Ocaml, но имею приличный опыт работы в java.
Я написал небольшой фрагмент кода, который показывает, что я хочу сделать в java:
public static int rec(int acc,int target) {
if (acc == target) {
return 0;
} else {
return rec(acc+1, target);
}
}
вот моя попытка воспроизвести c этот код в Ocaml:
let h_sequence x =
let rec helper acc x = function
| acc -> x
| _ -> helper acc+1 x
in
helper 0 x;;
однако я получаю следующую ошибку:
Error: This expression has type 'a -> 'b -> 'a
but an expression was expected of type int
Вот как я пытаюсь понять код Ocaml. Итак, у нас есть функция h_sequence с параметром x. Внутри функции h_sequence у нас есть рекурсивная функция с именем helper, которая имеет два параметра a cc и x. Если a cc = x, верните x. В противном случае начните рекурсию с передачи помощника, добавьте его к a cc и затем верните x. И после in он передает вспомогательную функцию, устанавливая 0 для a cc и устанавливая x как x. Пожалуйста, дайте мне знать, если мой logi c выключен. Любая помощь будет высоко ценится!
редактировать новый код:
let h_sequence x =
let rec helper acc x =
if acc = x then
acc
else
helper (acc+1) x
in
helper 0 x;;