Next: util.toposort - トポロジカルソート, Previous: util.stream - ストリームライブラリ, Up: ライブラリモジュール - ユーティリティ [Contents][Index]
util.temporal-relation - 時間的関係二つの時間間隔、もしくは時間間隔と時刻の関係を調べる手続きを提供します。
時間間隔は、開始時刻(lesser bound)と終了時刻(greater bound) で表されるオブジェクトです。 このモジュールは、時間間隔についての具体的なデータ構造は定めません。 代わりに、ユーザは自分の好みのデータ構造が時間間隔として 扱えるような時間間隔プロトコルを提供します。 時間間隔プロトコルは、時間間隔の開始時刻と終了時刻へのアクセサおよび 時間の比較方法をまとめたものです。
二つの時間間隔xとyがある時、その関係は13種類に分類できます (用語はHaskellのRampartライブラリから取りました https://hackage.haskell.org/package/rampart-2.0.0.0/docs/Rampart.html):
|<-- x -->|
|<-- y -->| x before y
|<-- x -->|
|<-- y -->| x meets y
|<--- x ---->|
|<-- y -->| x overlaps y
|<------ x ------->|
|<-- y -->| x finished-by y
|<------- x -------->|
|<---- y ---->| x contains y
|<-- x -->|
|<------ y ---->| x starts y
|<---- x ---->|
|<---- y ---->| x equal y
|<----- x ----->|
|<-- y -->| x started-by y
|<---- x ---->|
|<--------y -------->| x during y
|<-- x -->|
|<------ y ------->| x finishes y
|<-- x -->|
|<----- y ---->| x overlapped-by y
|<-- x -->|
|<-- y -->| x met-by y
|<-- x -->|
|<-- y -->| x after y
{util.temporal-relation} 時間間隔プロトコルを作って返します。 lesserとgreaterは、ユーザが使いたい時間間隔オブジェクトを引数にとって それぞれ開始時刻と終了時刻を返す手続きです。 compare-pointsは二つの時刻a, bを取り、aの方がbより時間的に前なら 負の実数を、aとbが同時刻なら0を、aの方がbより時間的に後なら正の実数を返す 手続きです。
時刻をどう表現するかはユーザに任されます。
compare-pointsが省略された場合は、
組み込みのcompareが使われます(比較参照)。
ほとんどのスカラー値はそれで充分です。
例えば実数や、<time>オブジェクト、<date>オブジェクトなどはそのまま
時刻を表す値として使えます。
{util.temporal-relation}
(make-interval-protocol car cdr)の値に束縛されています。
すなわち、開始時刻と終了時刻のペアで時間間隔を表すプロトコルです。
{util.temporal-relation}
objが時間的関係を表すシンボルであれば#tを、そうでなければ
#fを返します。有効なシンボルは以下のいずれかです:
before, meets, overlaps, finished-by,
contains, starts, equal, started-by,
during, finishes, overlapped-by, met-by,
after。
{util.temporal-relation}
引数relは時間的関係を表すシンボルでなければなりません
(有効なシンボルについては上のrelation?の項を参照)。
この手続きは、relの逆になる関係を表すシンボルを返します。
すなわち、_を時間間隔プロトコルとした時に、
(relate _ x y) ≡ (inverse (relate _ y x))が常に成り立ちます。
relが有効な時間的関係でなければエラーが投げられます。
{util.temporal-relation} protoは時間間隔プロトコル、xとyはそのプロトコルが有効な 時間間隔でなければなりません。
この手続きは二つの時間間隔の時間的関係を返します。返り値は次のシンボルのいずれかです:
before, meets, overlaps, finished-by,
contains, starts, equal, started-by,
during, finishes, overlapped-by, met-by,
after。
{util.temporal-relation} protoは時間間隔プロトコル、xはそのプロトコルが有効な時間間隔、 pointはprotoの時刻比較手続きに渡せる時刻でなければなりません。
返される時間関係は、時間間隔と時間間隔の間の関係のサブセットになります。
|<-- x -->|
p x before p
|<--- x --->|
p x finished-by p
|<--- x --->|
p x contains p
|<--- x --->|
p x started-by p
|<-- x -->|
p x after p
Next: util.toposort - トポロジカルソート, Previous: util.stream - ストリームライブラリ, Up: ライブラリモジュール - ユーティリティ [Contents][Index]