Ocaml,为什么这段代码不起作用?

Ocaml, why this code does not work?

let rec prime : int -> bool
 = fun n -> let rec f a = if (a = 1) then 1 
                       else if (n mod a) = 0 then 0 
                       else if ((f a-1) = 1) then 1 
                       else 0 
                       in 
                       if ((f n-1) = 1) then true 
                       else false 

正如您从我的代码中看到的那样,我想实现一个可以判断给定数字是否为质数的函数。

我可以编译 运行 这段代码,但对于所有 X 函数,请告诉 "false"。

为什么会这样?

提前致谢。 :)

表达式:

f n-1

解析如下:

(f n) - 1

你需要这样写:

f (n - 1)
((f n-1) = 1)

f n-1 等同于 (f n) - 1,而不是 f (n - 1)。因此,您要取一个 0 或 1 的数字,然后从中减去 1(得到 -1 或 0),然后查看它是否为 1,它永远不会是 1。

请注意,如果您将 f return 设为布尔值而不是整数(您不能从布尔值中减去),这甚至不会编译。