我是初學者,我必須在SML中寫一個函數。如何確定一年的哪一天屬於哪個月?
分配問題是:
寫了一個名爲
what_month
函數,它每天的數量(如257,假設一年365天)作爲輸入,並返回月份的數字,即這一天屬於。例如:
what_month(40)
應返回2
(二月)。
我是初學者,我必須在SML中寫一個函數。如何確定一年的哪一天屬於哪個月?
分配問題是:
寫了一個名爲
what_month
函數,它每天的數量(如257,假設一年365天)作爲輸入,並返回月份的數字,即這一天屬於。例如:
what_month(40)
應返回2
(二月)。
很簡單的情況下(不考慮閏年),你可以定義的天在幾個月months_days
列表,以及遞歸輔助函數aux
,接受一個名爲int
和sum
稱爲numbers
的int list
,和返回一個int
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
這樣做的一種方法可能是創建一個每月有多少天的列表。
這樣一份名單看起來是這樣的
days_in_month = [31, 28, 31, 30, ...]
然後,你可以根據每個月有多少天有輕鬆倒計時你輸入號碼。當您的號碼小於下個月的天數時,輸入號碼必須屬於您到達的月份。
請注意,這不包括閏年。但是如果需要的話,那也不應該難以實現。
我沒有看到你的評論。 –
我解決了這個函數的問題,謝謝Jesper,你的解決方案很有用。我還有一個問題,只是檢查並幫助我,如果可能的話,再次感謝 – Olivia
你知道該怎麼做嗎?一旦你找到了一個算法,它應該很容易轉換爲ML。 – molbdnilo
我已經在.txt文件中編寫了算法,但我不知道如何在頁面中上傳它,請問我能指導我嗎? – Olivia