问题描述
我正在学习Ocaml,作为练习的一部分,我必须创建一个返回一对夫妇第二天(天,月,年)的函数。
我完成了该功能,但是评估我的代码的软件告诉我,如果……那么……否则,我使用的太多了…… 我好几个小时都没有找到解决方案了。有人可以帮我吗?
let leap = fun x -> x mod 4 = 0 && x mod 100 <> 0 || x mod 400 = 0
let nbDay(month,year) = match monthwith
| 1 | 3 | 5 | 7 | 8 | 10 | 12 -> 31
| 4 | 6 | 9 | 11 -> 30
| 2 -> if(leap(year)) then 29 else 28
| _ -> 0
let valid (day,month,year) = day <= nbDay(month,year)
&& day>= 1
&& month<=12
&& month>= 1
let tomorrow (day,year) = if(valid (day,year))
then if(day= nbDay(month,year))
then
if(month= 12)
then
let day= 1 in
let month= 1 in
let year= year+ 1 in
(day,year)
else
let day= 1 in
let month= month+ 1 in
(day,year)
else
let day= day+ 1 in
(day,year)
else failwith "invalid date!"
解决方法
例如,您应该多使用match
而不是写
if month = 12 then xxx ...
你可以写
match month with
| 12 -> xxx
...
当您的病情更加复杂时,您可以使用when
代替书写
| 2 -> if is_leap year then x else y
你可以写
| 2 when is_leap year -> x
| 2 -> y