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语句来更好地解释这个概念和使用的可能性,因为我对初学者来说这个问题似乎是个问题。你可以把你的答案放进去,而不是放一个无用的评论