递归函数中的未绑定值(初学者 OCaml)
Unbound value in recursive function (Beginner 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 函数作为 let ... in
放在最后的 checkZero 5
调用中,added/removed x
参数放在 checkZero
函数中以防定义有误。
(运行 OCaml 在过去一周内通过自制软件在 OSX 下载)
如果您希望函数能够调用自身,则需要将其声明为递归的:
let rec checkZero d ...
代码:
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 函数作为 let ... in
放在最后的 checkZero 5
调用中,added/removed x
参数放在 checkZero
函数中以防定义有误。
(运行 OCaml 在过去一周内通过自制软件在 OSX 下载)
如果您希望函数能够调用自身,则需要将其声明为递归的:
let rec checkZero d ...