この関数は、要素の対を比較するためにpredicateを使って決定される
昇順にseqをソートする。predicateは、その第1引数がその第2
引数より小さい場合にのみ真(非nil
)を戻さなければならない。
たとえば<
やstring-lessp
は、それぞれ数や文字列を
ソートするのに適切な述語関数である; >
は昇順ではなく降順で数を
ソートするだろう。
この関数は、単なるリストにではなく、列のすべての型に作用できる点で、
Emacs組み込みのsort
と異なる。また、predicate関数へ
与えられるデータを前処理するのに使われる、:key
引数を受け
入れる。たとえば、
(setq data (sort data 'string-lessp :key 'downcase))
は、大文字小文字を考慮せずにアルファベットの昇順に文字列の列data
をソートする。car
の:key
関数は、連想リストのソートに有用
だろう。
sort*
関数は破壊的である; 適切な仕方でcdr
ポインタを実際に
再配列することで、リストをソートする。
この関数は、seqを安定してソートする。安定してとは、 predicateに関して等値な2つの要素は、ソートによってその元の 順序から再配列されないことが保証されているという意味である。
実際、sort*
とstable-sort
は、その下にあるsort
関数
が既定では安定なので、Emacs Lispでは同等である。しかしこのパッケージは、
将来sort*
のために非安定な方法を使う権利を予約する。
この関数は、それらの要素を差しはさむことで、2つの列seq1と
seq2をマージする。結果の列は、(concatenate
の意味で)
typeの型を持ち、2つの入力列の長さの和と等しい長さを持つ。列は
破壊的に修正されるかもしれない。seq1とseq2内の要素の
順序は、差しはさみで保存される; 2つの列の要素は、(sort
の
意味で) predicateで比較され、より小さい要素が結果の先に行く。
要素が等値の場合、結果ではseq1がseq2からの要素よりも
先にくる。従って、seq1とseq2がともにpredicateに
従ってソートされる場合、結果はpredicateに従って(安定に)
ソートされたマージ列だろう。