我们衡量时间的方式有点乱。 一分钟有 60 秒,一小时有 60 分钟。 这源自古代巴比伦,他们以 60 作为数字系统的基础。 一天有 24 小时,一周有 7 天,那么一个月有多少天呢? 嗯,一个月的天数不仅取决于它是哪个月,还取决于你所在的国家使用哪种历法。
那如果我们改用秒来表示时间间隔呢? 这样,我们就能借助公制前缀,把大量的秒写成更容易理解的数量。
如果有一天我们殖民了火星或其他星球,衡量时间会变得更加混乱。 当有人说“年”的时候,指的是地球上的年还是火星上的年?
这个练习的灵感来自作家 Vernor Vinge 的科幻小说 "A Deepness in the Sky"。 在书中,作者用公制作为时间度量的基础。
你的任务是确定某个日期之后一吉秒的日期和时间。
一吉秒等于十亿秒。 也就是 1 后面有 9 个 0。
如果你出生在 2015 年 1 月 24 日 22:00(晚上 10 点),那么到 2046 年 10 月 2 日 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 包的源码有详尽的文档,会很有帮助!