For Development HEAD DRAFTSearch (procedure/syntax/module):

12.94 util.temporal-relation - 時間的関係

Module: 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
Function: make-interval-protocol lesser greater :optional compare-points

{util.temporal-relation} 時間間隔プロトコルを作って返します。 lessergreaterは、ユーザが使いたい時間間隔オブジェクトを引数にとって それぞれ開始時刻と終了時刻を返す手続きです。 compare-pointsは二つの時刻a, bを取り、aの方がbより時間的に前なら 負の実数を、aとbが同時刻なら0を、aの方がbより時間的に後なら正の実数を返す 手続きです。

時刻をどう表現するかはユーザに任されます。

compare-pointsが省略された場合は、 組み込みのcompareが使われます(比較参照)。 ほとんどのスカラー値はそれで充分です。 例えば実数や、<time>オブジェクト、<date>オブジェクトなどはそのまま 時刻を表す値として使えます。

Variable: pair-interval-protocol

{util.temporal-relation} (make-interval-protocol car cdr)の値に束縛されています。 すなわち、開始時刻と終了時刻のペアで時間間隔を表すプロトコルです。

Function: relation? obj

{util.temporal-relation} objが時間的関係を表すシンボルであれば#tを、そうでなければ #fを返します。有効なシンボルは以下のいずれかです: before, meets, overlaps, finished-by, contains, starts, equal, started-by, during, finishes, overlapped-by, met-by, after

Function: inverse rel

{util.temporal-relation} 引数relは時間的関係を表すシンボルでなければなりません (有効なシンボルについては上のrelation?の項を参照)。 この手続きは、relの逆になる関係を表すシンボルを返します。 すなわち、_を時間間隔プロトコルとした時に、 (relate _ x y)(inverse (relate _ y x))が常に成り立ちます。

relが有効な時間的関係でなければエラーが投げられます。

Function: relate proto x y

{util.temporal-relation} protoは時間間隔プロトコル、xyはそのプロトコルが有効な 時間間隔でなければなりません。

この手続きは二つの時間間隔の時間的関係を返します。返り値は次のシンボルのいずれかです: before, meets, overlaps, finished-by, contains, starts, equal, started-by, during, finishes, overlapped-by, met-by, after

Function: relate-point proto x point

{util.temporal-relation} protoは時間間隔プロトコル、xはそのプロトコルが有効な時間間隔、 pointprotoの時刻比較手続きに渡せる時刻でなければなりません。

返される時間関係は、時間間隔と時間間隔の間の関係のサブセットになります。

|<-- 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


For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT