時間の測り方というのは、なんだかごちゃごちゃしています。 1分は60秒、1時間は60分ですね。 これは古代バビロニアに由来し、そこでは数の体系の基準として60が使われていました。 1日は24時間、1週間は7日ですが、1か月は何日でしょうか? 実は、1か月の日数は何月かによってだけでなく、住んでいる国でどの種類の暦が使われているかによっても変わります。
では、時間の間隔を表すのに秒だけを使うとしたらどうでしょう? そうすれば、大きな秒数をよりわかりやすい量で書くために、メートル法の接頭辞を使えます。
将来、火星かどこか別の惑星に移住することになったら、時間の測定はさらにごちゃごちゃするでしょう。 誰かが「年」と言ったとき、それは地球の1年を指すのか、それとも火星の1年なのでしょうか?
この演習のアイデアは、作家Vernor VingeのSF小説"A Deepness in the Sky"から生まれました。 その中で著者は、時間の測定の基準としてメートル法を使っています。
ある日時から1ギガ秒後の日時を求めるのが、この演習の課題です。
1ギガ秒は10億秒です。 つまり、1のあとに0が9つ続く数です。
もし、_2015年1月24日の22時_に生まれたなら、1ギガ秒を迎えるのは_2046年10月2日の23時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パッケージのソースはドキュメントが充実しているので、きっと役に立ちます!