递归函数中的未绑定值(初学者 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 ...