每個月,你的伴侶都會和他們最好的朋友見面。 他們兩個人的行程都非常忙,要找到適合的日期可說是一大挑戰! 由於你自己的行程也很忙,你的伴侶總是會先和你確認可能的見面日期:
在這個月的通話中,你的伴侶問了你這個問題:
你一頭霧水,問什麼是「teenth」日。 你的伴侶解釋說,他們自創了一個叫 teenth day 的概念,指的是每個月裡以「-teenth」結尾的那些日子:
由於一週也有七天,因此可以保證每個星期幾在每個月都恰好會有一個 teenth day。
現在你懂了 teenth day 的概念,便去查看自己的行事曆。 你在那個 teenth 星期四沒有任何安排,於是開心地和伴侶確認了這個日期。
你的任務是:給定月份、年份、星期幾與週次,找出聚會的確切日期。
需要考慮的週次值有六個:first、second、third、fourth、last、teenth。
舉例來說,你可能會被要求找出 2018 年 1 月第一個星期一的聚會日期(2018 年 1 月 1 日)。
同樣地,你也可能被要求找出:
teenth 這個週次指的是每個月裡以「-teenth」結尾的那七天(13 日、14 日、15 日、16 日、17 日、18 日與 19 日)。
如果要找出 1953 年 8 月的 teenth 星期六,我們就查看當月的月曆:
August 1953
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
由此可知,teenth 星期六是 1953 年 8 月 15 日。
Prolog 對日期的內建支援相當基本。處理日期更優雅的方式,是使用 [date_time 套件][date_time-package]。
如果你安裝的 Swipl 版本夠新,可以執行下列指令來安裝這個套件:
swipl pack install date_time
如果這樣行不通,可以改成執行:
swipl -g 'pack_install(date_time)'
如果你使用的是線上編輯器,就不需要手動安裝任何東西。
在解答檔案的最前面加入下列程式碼,就能使用date_time套件:
:- use_module(library(date_time)).
提示:date_time 套件的[原始碼][https://www.swi-prolog.org/pack/file_details/date_time/prolog/date_time.pl?show=src]有完整的說明文件,會是很大的幫助!