Sorting
The :std/sort
library provides sorting facilities using Olin's
withdrawn SRFI-32 implementation.
To use the bindings from this module:
(import :std/sort)
sort
(sort seq less?) -> sequence
seq := list or vector
less? := comparison procedure
Sorts a sequence (a list or vector) and returns a new sorted sequence, using
the less?
procedure to compare elements.
The procedure uses merge sort for lists and heap sort for vectors, which does
not produce a stable sort.
Examples:
> (sort [2 5 1] <)
(1 2 5)
sort!
(sort! seq less?) -> sequence
seq := list or vector
less? := comparison procedure
Like sort
, but the procedure is allowed to reuse/modify the original sequence to
produce its output.
stable-sort
(stable-sort seq less?) -> sequence
seq := list or vector
less? := comparison procedure
Like sort
, but it uses merge sort for vectors as well, which produces a stable
sort.
stable-sort!
(stable-sort! seq less?) -> sequence
seq := list or vector
less? := comparison procedure
Like stable-sort
, but the procedure is allowed to reuse/modify the original sequence to
produce its output.
Symbolic Comparisons
Often times there is a need to sort using symbolic comparisons. The
:std/misc/symbol
library implements caching versions of symbolic
comparisons using the string representation.
To use the bindings from this module:
(import :std/misc/symbol)
symbol<?
(symbol<? x y) -> bool
x,y := symbol
Compares two symbols' string representation using string<?
.
The string representation is globally cached.
symbol<=?
Similar to symbol<?
, using string<=?
symbol>=?
Similar to symbol<?
, using string>=?
symbol>?
Similar to symbol<?
, using string>?
compare-symbol<?
(compare-symbol<? (mx? #f)) -> lambda (symbol symbol) -> bool
mx? := bool; use a mutex to protect the cache
Create a locally scoped caching symbol<?
-like comparison with its own cache.
compare-symbol<=?
Similar to compare-symbol<?
using string<=?
.
compare-symbol>=?
Similar to compare-symbol<?
using string>=?
.
compare-symbol>?
Similar to compare-symbol<?
using string>?
.
keyword<?
(keyword<? x y) -> bool
x,y := keyword
Compares two keywords' string representation using string<?
.
The string representation is globally cached.
keyword<=?
Similar to keyword<?
, using string<=?
keyword>=?
Similar to keyword<?
, using string>=?
keyword>?
Similar to keyword<?
, using string>?
compare-keyword<?
(compare-keyword<? (mx? #f)) -> lambda (keyword keyword) -> bool
mx? := bool; use a mutex to protect the cache
Create a locally scoped caching keyword<?
-like comparison with its own cache.
compare-keyword<=?
Similar to compare-keyword<?
using string<=?
.
compare-keyword>=?
Similar to compare-keyword<?
using string>=?
.
compare-keyword>?
Similar to compare-keyword<?
using string>?
.
compare-symbolic
(compare-symbolic string-e cmp-e mx?) -> lambda (symbol symbol) -> bool
string-e := lambda (obj) -> string
cmp-e := lambda (symbol symbol) -> bool
mx? := bool; use a mutex to protect the cache
Create a generic caching symbolic comparison function.
For instance:
symbol<? == (compare-symbolic symbol->string string? #t)