编写一个名为month_range的函数,该函数将一年中的两天命名为day_one,将day_two(例如65,128,假设年份为365天)作为输入,并返回其月份的int列表。
此int列表的大小必须为day_two - day_one + 1;
请注意,如果day_one> day_two,list = 0的大小
示例:month_range(25,36) should return [1,1,1,1,1,1,1,2,2,2,2,2]
1月(25,26,27,...,31)和2月(1,2,...,5)
我编写了代码,但它不起作用:
fun month_range (day1:int,day2:int) =
let
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
in
if (day1>day2)
then []
else what_month(day1) @ what_month(day2)
end
答案 0 :(得分:1)
根据您的previous question,您有一个函数what_month
,它将返回一年中某一天的月份数。
您可以非常简单地从day_one
到day_two
进行迭代,每次调用what_month
函数。
现在将它全部放在结果列表中,可以通过将what_month
的结果与函数的递归调用连接起来,索引加1,当索引达到{{day_two
时与空列表连接。 1}}。