2014-09-29 26 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)