روش ما برای اندازهگیری زمان کمی درهموبرهم است. در یک دقیقه ۶۰ ثانیه داریم و در یک ساعت ۶۰ دقیقه. این از بابل باستان میآید، جایی که ۶۰ را مبنای دستگاه اعداد خود قرار میدادند. یک روز ۲۴ ساعت دارد، یک هفته ۷ روز. اما یک ماه چند روز دارد؟ خب، تعداد روزهای یک ماه نه تنها به این بستگی دارد که کدام ماه است، بلکه به این هم بستگی دارد که در کشور محل زندگی شما از چه نوع تقویمی استفاده میشود.
چه میشود اگر بهجای این، برای بیان بازههای زمانی فقط از ثانیه استفاده کنیم؟ در آن صورت میتوانیم برای نوشتن تعداد زیادی ثانیه به شکل کمیتهایی که فهمشان راحتتر است، از پیشوندهای دستگاه متریک استفاده کنیم.
اگر روزی مریخ یا سیارهی دیگری را مستعمره کنیم، اندازهگیری زمان حتی درهموبرهمتر هم میشود. اگر کسی بگوید «سال»، منظورش سال روی زمین است یا سال روی مریخ؟
ایدهی این تمرین از رمان علمیتخیلی «A Deepness in the Sky» نوشتهی نویسنده ورنر وینج گرفته شده است. در آن، نویسنده از دستگاه متریک به عنوان مبنای اندازهگیری زمان استفاده میکند.
وظیفهی شما تعیین تاریخ و زمانی است که یک «گیگاثانیه» پس از یک تاریخ مشخص رخ میدهد.
گیگاثانیه برابر است با هزار میلیون ثانیه. یعنی عدد ۱ و بعد از آن ۹ صفر.
اگر در ۲۴ ژانویه ۲۰۱۵، ساعت ۲۲:۰۰ (۱۰:۰۰:۰۰ شب) به دنیا آمده باشید، در ۲ اکتبر ۲۰۴۶، ساعت ۲۳:۴۶:۴۰ (۱۱:۴۶:۴۰ شب) یک گیگاثانیه سن خواهید داشت.
پشتیبانی توکار 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 مستندسازی خوبی دارد و میتواند کمک بزرگی باشد!