如何解决Ocaml优化明天功能
我正在学习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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。