Те, як ми вимірюємо час, досить заплутано. У хвилині 60 секунд, а в годині 60 хвилин. Це прийшло з давнього Вавилону, де число 60 було основою їхньої системи числення. У добі 24 години, у тижні 7 днів, а скільки днів у місяці? Що ж, кількість днів у місяці залежить не лише від того, який це місяць, а й від того, який тип календаря використовують у країні, де ми живемо.
А що, якби для вираження часових проміжків ми використовували лише секунди? Тоді ми могли б застосовувати префікси метричної системи, щоб записувати великі числа секунд у легших для сприйняття величинах.
Якщо ми колись колонізуємо Марс чи якусь іншу планету, вимірювання часу стане ще заплутанішим. Коли хтось каже «рік», то має на увазі рік на Землі чи рік на Марсі?
Ідея цієї вправи походить із науково-фантастичного роману "A Deepness in the Sky" автора Вернора Вінґа. У ньому автор використовує метричну систему як основу для вимірювання часу.
Визначте дату й час через один гігасекунд після певної дати.
Гігасекунда - це тисяча мільйонів секунд. Інакше кажучи, це одиниця з девʼятьма нулями після неї.
Якби ми народилися 24 січня 2015 року о 22:00 (10:00:00pm), то 2 жовтня 2046 року о 23:46:40 (11:46:40pm) нам виповнився б один гігасекунд.
Вбудована підтримка дат у Prolog доволі елементарна. Хоча цю вправу можна розвʼязати лише вбудованими засобами Prolog, значно зручніший спосіб працювати з датами дає пакет date_time.
Якщо встановлена версія Swipl досить свіжа, пакет можна встановити командою:
swipl pack install date_time
Якщо це не спрацює, можна виконати:
swipl -g 'pack_install(date_time)'
В онлайн-редакторі нічого не потрібно встановлювати вручну.
Додайте на початок файлу з рішенням такий код, щоб скористатися пакетом date_time:
:- use_module(library(date_time)).
Порада: джерельний код пакета date_time добре задокументовано, і він стане чудовим помічником!