-1

我是初学者,我必须在 SML 中编写一个函数。

作业问题是:

编写一个名为的函数what_month,它将一天的编号(例如,257,假设一年 365 天)作为输入,并返回这一天所属的月份的编号。

示例:what_month(40)应该返回2(二月)。

4

2 回答 2

0

一种方法是创建一个每个月有多少天的列表。

这样的列表可能如下所示

days_in_month = [31, 28, 31, 30, ...]

然后您可以根据每个月的天数轻松倒数您输入的数字。当您到达的数字小于下个月的天数时,输入的数字必须属于您到达的月份。

请注意,这不考虑闰年。但是,如果需要的话,这也不应该那么难。

于 2013-04-03T13:54:38.443 回答
0

对于简单的情况(不考虑闰年),您可以定义一个以月为单位的天数列表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
于 2013-04-03T17:02:10.907 回答