OCaml异常提升为分裂

时间:2014-09-29 10:25:11

标签: exception ocaml

我有一个简单的程序:

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

但我想检查一个是4的倍数(如4,8,12,16等),如果它不是倍数我想提出异常,比如“不是倍数” 4" 。我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

你可以依赖一个事实,即所有可被4个数字整除的低位被设置为零。公式是:

let divisible_by_4 x = x land 3 = 0

在这里,我刚刚测试了两个低位都没有设置为1.

此外,模块划分是相当繁重的操作,所以如果没有它可以做一些任务,那就去做。

因为,你想提出一个异常,当数字不可分割时,最好使用某种断言:

assert (divisible_by_4 16);

答案 1 :(得分:0)

试试这个:

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

它是一个返回布尔值并使用mod函数

的函数

答案 2 :(得分:0)

您可以像这样定义一个例外:

exception Not_multiple_of_4

您可以像这样提出此异常:

raise Not_multiple_of_4

如果你想获得幻想,你可以在例外中包含违规值:

exception Not_multiple_of_4 of int

然后你可以传递错误值:

raise (Not_multiple_of_4 a)