util.temporal-relation
- Temporal relation ¶Procedures to find relation between two temporal intervals, or a temporal interval and a point in time.
A temporal interval is represented by two points in time, lesser bound and greater bound. This module does not define a concrete structure for temporal intervals. Instead, the user provides a interval protocol, which specifies how to access start/end time and how to compare them.
Given two temporal intervals x and y, there are 13 possible relations (the terms are taken from Haskell Rampart library 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
}
Creates and returns an interval protocol. The lesser and
greater arguments are procedures taking an user-defined interval
object, and returns its lesser bound and greater bound, respectively.
The compare-points argument is a procedure that takes two points of
time, and must return either a negative real value (if the first point is before
the second), zero (if two points are the same), or a positive real value
(if the first point is after the second).
The actual representation of time points are up to the caller.
If the compare-points argument is omitted,
the built-in compare
procedure
is used (see Comparison). It is suffice for most scalar values;
e.g. you may use real numbers, <time>
, or <date>
objects.
{util.temporal-relation
}
Bound to (make-interval-protocol car cdr)
; that is, an interval
represented by cons of lesser bound and greater bound.
{util.temporal-relation
}
Returns #t
iff obj is a symbol representing
a temporal relation. Valid symbols are one of
before
, meets
, overlaps
, finished-by
,
contains
, starts
, equal
, started-by
,
during
, finishes
, overlapped-by
, met-by
and after
.
{util.temporal-relation
}
The argument must be a symbol representing a temporal relation
(see relation?
above for the valid symbols).
This procedure returns its inverse relation; that is,
(relate _ x y)
≡ (inverse (relate _ y x))
,
where _
is an interval protocol.
An error is thrown if rel is not a valid relation.
{util.temporal-relation
}
The proto argument is an interval protocol, and both x and y
must be temporal intervals that is compatible to the protocol proto.
The procedure returns a temporal relation, represented as one of
the following symbols:
before
, meets
, overlaps
, finished-by
,
contains
, starts
, equal
, started-by
,
during
, finishes
, overlapped-by
, met-by
and after
.
{util.temporal-relation
}
The proto argument is an interval protocol, and x must
be a temporal interval that implements the protocol. The point
is a point of time, comparable by the compare-points procedure
of the protocol.
The possible relations are a subset of interval-interval relations:
|<-- 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