轨道
/
Prolog
Prolog
/
练习
/
十亿秒
十亿秒

十亿秒

简单

简介

我们衡量时间的方式有点乱。 一分钟有 60 秒,一小时有 60 分钟。 这源自古代巴比伦,他们以 60 作为数字系统的基础。 一天有 24 小时,一周有 7 天,那么一个月有多少天呢? 嗯,一个月的天数不仅取决于它是哪个月,还取决于你所在的国家使用哪种历法。

那如果我们改用秒来表示时间间隔呢? 这样,我们就能借助公制前缀,把大量的秒写成更容易理解的数量。

  • 食谱里可能会说,布朗尼需要在烤箱里烤 2 千秒(也就是 2000 秒)。
  • 也许你和家人会去某个充满异域风情的地方旅行,一去就是 2 兆秒(也就是 200 万秒)。
  • 而如果你和伴侣已经结婚 十亿 秒,那你们就该庆祝结婚一吉秒纪念日了。
Note

如果有一天我们殖民了火星或其他星球,衡量时间会变得更加混乱。 当有人说“年”的时候,指的是地球上的年还是火星上的年?

这个练习的灵感来自作家 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 内置的日期支持相当基础。只用 Prolog 内置的功能也能解出这道练习,但处理日期更舒服的方式是使用 date_time 包。

安装 date_time 包

如果你安装的 Swipl 版本比较新,可以通过运行以下命令来安装这个包:

swipl pack install date_time

如果这样不行,可以运行:

swipl -g 'pack_install(date_time)'
Note

如果你使用的是在线编辑器,就不需要手动安装任何东西。

使用 date_time 包

将以下代码添加到解答文件的开头,即可使用 date_time 包:

:- use_module(library(date_time)).
Note

提示:date_time 包的源码有详尽的文档,会很有帮助!

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Prolog Exercism

准备好开始 十亿秒 了吗?

注册 Exercism,借助 109 个练习 和真人导师指导,学习并掌握 Prolog,全部免费。