2014-09-29 25 views
0

我有一個簡單的程序,像這樣:OCaml的異常募集除法

let dividebyfour (a: int) : int = 
    a/4;; 

但我想檢查,如果是4的倍數(如4,8,12,16等),並且如果這不是一個倍數,我想提出一個例外,例如「不是4的倍數」。我會如何去做這件事?

回答

1

你可以依靠一個事實,即所有被4倍整除的數字有兩個低位設置爲零。因此,公式爲:

let divisible_by_4 x = x land 3 = 0 

這裏,我只是測試,兩個下位未設置爲1

此外,模塊劃分是相當繁重的操作,所以如果你可以做一些任務沒有它,然後做。

而且因爲,你想提出一個例外,當該數目不能整除,這是好事,使用某種斷言:

assert (divisible_by_4 16); 
0

試試這個:

let dividebyfour a = 
      if a mod 4 =0 then true else false;; 

這是一個返回boolean值的功能和使用MOD功能

+3

無需'if',只是'讓divisible_by_four X = X MOD 4 = 0'。 – gsg 2014-09-29 11:13:59

+0

我把if語句更好地解釋了概念和使用的可能性,因爲這個問題對我來說似乎是初學者。你可以把你的答案,而不是放在一個無用的評論 – daniele3004 2014-09-29 12:08:21

0

你可以像這樣定義一個例外:

exception Not_multiple_of_4 

您可以提高這個例外是這樣的:如果你想獲得看上你可以包括見於Ger.Offen

raise Not_multiple_of_4 

在異常丁值:

exception Not_multiple_of_4 of int 

然後,你可以沿着錯誤的值傳遞:

raise (Not_multiple_of_4 a)