Previous: , Up:   [Contents][Index]


9.5 列のソート

Function: sort* seq predicate &key :key

この関数は、要素の対を比較するために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ポインタを実際に 再配列することで、リストをソートする。

Function: stable-sort seq predicate &key :key

この関数は、seq安定してソートする。安定してとは、 predicateに関して等値な2つの要素は、ソートによってその元の 順序から再配列されないことが保証されているという意味である。

実際、sort*stable-sortは、その下にあるsort関数 が既定では安定なので、Emacs Lispでは同等である。しかしこのパッケージは、 将来sort*のために非安定な方法を使う権利を予約する。

Function: merge type seq1 seq2 predicate &key :key

この関数は、それらの要素を差しはさむことで、2つの列seq1seq2をマージする。結果の列は、(concatenateの意味で) typeの型を持ち、2つの入力列の長さの和と等しい長さを持つ。列は 破壊的に修正されるかもしれない。seq1seq2内の要素の 順序は、差しはさみで保存される; 2つの列の要素は、(sortの 意味で) predicateで比較され、より小さい要素が結果の先に行く。 要素が等値の場合、結果ではseq1seq2からの要素よりも 先にくる。従って、seq1seq2がともにpredicateに 従ってソートされる場合、結果はpredicateに従って(安定に) ソートされたマージ列だろう。