我有一個簡單的程序,像這樣:OCaml的異常募集除法
let dividebyfour (a: int) : int =
a/4;;
但我想檢查,如果是4的倍數(如4,8,12,16等),並且如果這不是一個倍數,我想提出一個例外,例如「不是4的倍數」。我會如何去做這件事?
我有一個簡單的程序,像這樣:OCaml的異常募集除法
let dividebyfour (a: int) : int =
a/4;;
但我想檢查,如果是4的倍數(如4,8,12,16等),並且如果這不是一個倍數,我想提出一個例外,例如「不是4的倍數」。我會如何去做這件事?
你可以依靠一個事實,即所有被4倍整除的數字有兩個低位設置爲零。因此,公式爲:
let divisible_by_4 x = x land 3 = 0
這裏,我只是測試,兩個下位未設置爲1
此外,模塊劃分是相當繁重的操作,所以如果你可以做一些任務沒有它,然後做。
而且因爲,你想提出一個例外,當該數目不能整除,這是好事,使用某種斷言:
assert (divisible_by_4 16);
試試這個:
let dividebyfour a =
if a mod 4 =0 then true else false;;
這是一個返回boolean值的功能和使用MOD功能
你可以像這樣定義一個例外:
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)
無需'if',只是'讓divisible_by_four X = X MOD 4 = 0'。 – gsg 2014-09-29 11:13:59
我把if語句更好地解釋了概念和使用的可能性,因爲這個問題對我來說似乎是初學者。你可以把你的答案,而不是放在一個無用的評論 – daniele3004 2014-09-29 12:08:21