我正在尝试使用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) ;;