2016-09-27 38 views
1
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 

正如你可以從我的代碼看到的,我想實現一個函數,它可以告訴給定的數字是否爲素數。Ocaml,爲什麼這段代碼不工作?

我可以編譯並運行這段代碼,但是對於所有的X函數來說都是「false」。

爲什麼會發生這種情況?

在此先感謝。 :)

+0

我建議總是在二元運算符周圍添加空格。通過編寫'f n - 1'而不是'f n-1',很多初學者誤讀爲'f(n-1)',這會讓你感到困惑。 – camlspotter

回答

0

表達:

f n-1 

被解析如下:

(f n) - 1 

你需要這樣寫:

f (n - 1) 
+0

非常感謝!!!!!! – wyldecat

0
((f n-1) = 1) 

f n-1相當於(f n) - 1,不是f (n - 1)。所以,你需要一個0或1的數字,然後從1減去1(產生-1或0),然後看看它是否是1,它永遠不會。

請注意,如果你使f返回一個布爾值而不是一個整數(你不能從布爾值中減去),這甚至不會編譯。