طريقة قياسنا للزمن فوضوية نوعًا ما. فالدقيقة تحتوي على 60 ثانية، والساعة على 60 دقيقة. وهذا يعود إلى بابل القديمة، حيث استخدموا العدد 60 أساسًا لنظامهم العددي. واليوم فيه 24 ساعة، والأسبوع فيه 7 أيام، أما الشهر فكم يومًا فيه؟ حسنًا، عدد أيام الشهر لا يعتمد على الشهر نفسه فقط، بل يعتمد أيضًا على نوع التقويم المستخدم في البلد الذي تعيش فيه.
فماذا لو استخدمنا الثواني وحدها، بدلًا من ذلك، للتعبير عن الفواصل الزمنية؟ حينها يمكننا استخدام سوابق النظام المتري لكتابة أعداد كبيرة من الثواني بمقادير أسهل على الفهم.
لو استعمرنا المريخ أو أي كوكب آخر يومًا ما، فسيصبح قياس الزمن أكثر فوضوية مما هو عليه الآن. وإذا قال أحدهم "سنة"، فهل يقصد سنة على الأرض أم سنة على المريخ؟
جاءت فكرة هذا التمرين من رواية الخيال العلمي "A Deepness in the Sky" للمؤلف Vernor Vinge. وفيها يستخدم المؤلف النظام المتري أساسًا لقياس الزمن.
مهمتك هي تحديد التاريخ والوقت بعد جيجا ثانية واحدة من تاريخ معيّن.
الجيجا ثانية هي ألف مليون ثانية. أي الرقم واحد تليه تسعة أصفار.
إذا وُلدت في 24 يناير 2015 الساعة 22:00 (10:00:00 مساءً)، فسيكون عمرك جيجا ثانية واحدة في 2 أكتوبر 2046 الساعة 23:46:40 (11:46:40 مساءً).
الدعم المدمج للتواريخ في 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 موثّق توثيقًا جيدًا وسيكون عونًا كبيرًا لك!
سجّل في Exercism لتتعلّم وتتقن Prolog عبر 109 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.