我是初学者,我必须在 SML 中编写一个函数。
作业问题是:
编写一个名为的函数
what_month
,它将一天的编号(例如,257,假设一年 365 天)作为输入,并返回这一天所属的月份的编号。示例:
what_month(40)
应该返回2
(二月)。
我是初学者,我必须在 SML 中编写一个函数。
作业问题是:
编写一个名为的函数
what_month
,它将一天的编号(例如,257,假设一年 365 天)作为输入,并返回这一天所属的月份的编号。示例:
what_month(40)
应该返回2
(二月)。
一种方法是创建一个每个月有多少天的列表。
这样的列表可能如下所示
days_in_month = [31, 28, 31, 30, ...]
然后您可以根据每个月的天数轻松倒数您输入的数字。当您到达的数字小于下个月的天数时,输入的数字必须属于您到达的月份。
请注意,这不考虑闰年。但是,如果需要的话,这也不应该那么难。
对于简单的情况(不考虑闰年),您可以定义一个以月为单位的天数列表months_days
和一个递归辅助函数aux
,它接受一个int
被调用sum
和一个int list
被调用numbers
,并返回一个int
n
这样n
的列表的第一个元素添加到小于sum
,但n + 1
列表的第一个元素添加到sum
或更多。
val month_days= [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
fun what_month(day :int) =
let
fun aux(sum :int, numbers: int list) =
let
val numbers_tail = tl numbers
in
if sum <= (hd numbers)
then 1
else
1 + aux(sum, (hd numbers + hd numbers_tail)::(tl numbers_tail))
end
in
aux(day, month_days)
end