매달 파트너는 가장 친한 친구와 만나요. 둘 다 일정이 아주 바빠서 적당한 날짜를 잡기가 쉽지 않죠! 파트너는 나도 일정이 바쁜 걸 알기 때문에, 만날 만한 날짜를 항상 나와 다시 확인해요:
이번 달 통화에서 파트너가 이렇게 물었어요:
어리둥절해진 나는 "teenth" 날이 뭔지 물어봐요. 파트너는 스스로 만들어 낸 개념인 teenth 날은 한 달 중 '-teenth'로 끝나는 날을 가리킨다고 설명해요:
요일도 일곱 개이기 때문에, 각 요일마다 매달 정확히 하나씩 teenth 날이 있다는 게 보장돼요.
이제 teenth 날의 개념을 이해했으니, 달력을 확인해요. teenth 목요일에는 아무 일정도 없어서, 기쁜 마음으로 파트너와 날짜를 확정해요.
월, 연도, 요일, 주가 주어지면 모임의 정확한 날짜를 찾아야 해요.
고려할 주를 나타내는 값은 first, second, third, fourth, last, teenth 여섯 가지예요.
예를 들어, 2018년 1월의 첫 번째 월요일에 열리는 모임의 날짜를 찾으라는 문제가 나올 수 있어요 (2018년 1월 1일).
마찬가지로, 다음을 찾으라는 문제가 나올 수도 있어요:
틴스 주는 한 달 중 '-teenth'로 끝나는 7일을 가리켜요 (13th, 14th, 15th, 16th, 17th, 18th, 19th).
1953년 8월의 틴스 주 토요일을 찾으라고 하면, 그 달의 달력을 확인해 봐요:
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
이로부터 틴스 주 토요일이 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]는 문서가 잘 되어 있어서 큰 도움이 될 거예요!