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

时间:2016-09-27 20:11:00

标签: ocaml

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”。

为什么会这样?

提前致谢。 :)

2 个答案:

答案 0 :(得分:0)

表达式:

f n-1

解析如下:

(f n) - 1

你需要写下这个:

f (n - 1)

答案 1 :(得分:0)

.purchased

((f n-1) = 1) 相当于f n-1,而不是(f n) - 1。所以你取一个0或1的数字,然后减去1(产生-1或0),然后看它是否为1,它永远不会是。

请注意,如果你使f (n - 1)返回一个布尔值而不是一个整数(你不能从一个布尔值中减去),这甚至都没有编译。