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