我正在尝试使用OCaml语言编写程序,但是在使用嵌套函数时遇到了问题。这是我写的代码:

let prime : int -> bool
= fun x ->
  if x > 2 then
    let a = x - 1 in
      let rec checkZero a x =
        if a > 1 then
          match x mod a with
           0 -> false
          |_ -> checkZero (a - 1) x
        else if a = 1 then
          true
  else if x = 2 then
    true
  else
    false
;;

为了简要说明我的代码,我使用了一个称为checkZero的嵌套函数来确定x是否可被a值整除,该值从x - 1开始,一直下降到2。

执行模式匹配后,如果mod操作的结果为0,则x不是质数,如果结果为其他值,则我们从a中减去1,然后再次执行checkZero

我收到的特定错误消息是在双分号所在的位置出现语法错误。

我不太了解OCaml的工作原理,但是我确实知道当您希望整个代码成为表达式时,会使用双分号。
我不完全确定是什么导致了错误。

任何反馈表示赞赏。谢谢!

最佳答案

供以后引用,这是一个更简单的函数,其功能与您相同(没有优化,但更短):

let prime n =
    let rec checkZero x d = match d with
        | 1 -> true
        | _ -> (x mod d <> 0) && checkZero x (d-1)
    in match n with
    | 0 | 1 -> false
    | _ -> checkZero n (n-1) ;;

10-04 20:28