#recursion #ocaml
#рекурсия #ocaml
Вопрос:
Код:
let isPrime x =
let checkZero d = match (x mod d, x mod d 2, intRoot x < d) with
| (0,_,_) -> false
| (_,0,_) -> false
| (_,_,true) -> true
| _ -> checkZero (d 6) in
match x with
| 0 -> false
| 1 -> true
| 2 -> true
| 3 -> true
| _ -> match (x mod 2, x mod 3) with
| (0,_) -> false
| (_,0) -> false
| _ -> checkZero 5
Ошибка:
line 9, characters 24-33:
Error: Unbound value checkZero
Который ссылается на рекурсивный вызов checkZero (d 6)
Я попытался поместить функцию checkZero в качестве a let ... in
в последнем checkZero 5
вызове и добавил / удалил x
параметр в checkZero
функции на случай, если произошла ошибка с определением.
(Запуск OCaml, загруженный на прошлой неделе на OSX через homebrew)
Ответ №1:
Если вы хотите, чтобы функция могла вызывать саму себя, вам нужно объявить ее рекурсивной:
let rec checkZero d ...
Комментарии:
1. Сработало. Спасибо!