Exception OCaml为分区引发异常

Exception OCaml为分区引发异常,exception,ocaml,Exception,Ocaml,我有这样一个简单的程序: let dividebyfour (a: int) : int = a/4;; 但我想检查a是否是4的倍数(比如4、8、12、16等),如果它不是倍数,我想提出一个例外,比如“不是4的倍数”。我该怎么做呢?试试这个: let dividebyfour a = if a mod 4 =0 then true else false;; 它是一个返回布尔值并使用mod函数的函数。你可以依赖一个事实,即所有可被四个数整除的数都有两个低位设置

我有这样一个简单的程序:

 let dividebyfour (a: int) : int = 
   a/4;;
但我想检查a是否是4的倍数(比如4、8、12、16等),如果它不是倍数,我想提出一个例外,比如“不是4的倍数”。我该怎么做呢?

试试这个:

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

它是一个返回布尔值并使用mod函数的函数。你可以依赖一个事实,即所有可被四个数整除的数都有两个低位设置为零。所以公式是:

let divisible_by_4 x = x land 3 = 0
在这里,我刚刚测试了两个低位是否都没有设置为1

此外,模块化分工是相当繁重的操作,因此,如果您可以在不使用模块化分工的情况下完成某些任务,则可以

由于您想提出一个例外,当数字不可除时,最好使用某种类型的断言:

assert (divisible_by_4 16);

您可以定义如下所示的异常:

exception Not_multiple_of_4
raise Not_multiple_of_4
您可以这样引发此异常:

exception Not_multiple_of_4
raise Not_multiple_of_4
如果您想获得更多乐趣,可以在异常中包含有问题的值:

exception Not_multiple_of_4 of int
然后可以传递错误值:

raise (Not_multiple_of_4 a)

无需
if
,只需
让_除以_-four x=x mod 4=0
。我用if语句来更好地解释这个概念和使用的可能性,因为我对初学者来说这个问题似乎是个问题。你可以把你的答案放进去,而不是放一个无用的评论