status: final (2005-09-11)
keywords: Comparison
library name: compare-procedures
This SRFI can be seen as an extension of the
standard procedures =
, <
, char<?
etc. of
R5RS -- or even as a replacement. The primary design aspect in
this SRFI is the separation of representing a total order and
using it. For representing the order, we have chosen for truly
3-way comparisons. For using it we provide an extensive set of
operations, each of which accepts a procedure used for comparison. Since
these compare procedures are often optional, comparing built-in types is
as convenient as R5RS , sometimes more convenient: For
example, testing if the integer index i lies in the integer
range {0, ...
, n -
1} can be written as
(<=/<? 0 i n)
, implicitly invoking
default-compare
.
As soon as new total orders are required, the infrastructure provided by this SRFI is far more convenient and often even more efficient than building each total order from scratch.
Moreover, in case Scheme users and implementors
find this mechanism useful and adopt it, the benefit of having a uniform
interface to total orders to be used in data structures will manifest
itself. Most concretely, a new sorting procedure in the spirit of this
SRFI would have the interface (my-sort [ compare ]
xs)
, using default-compare
if the optional
compare was not provided. Then my-sort
could be defined
using the entire infrastructure of this SRFI: Efficient 2- and 3-way
branching, testing for chains and pairwise inequality, min/max, and
general order statistics.