我有一个简单的程序,像这样: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