この節は、列に作用するかなりの数のCommon Lisp関数を記述する。
この関数は、引数sequenceの与えられた部分列を戻す。sequence はリストや、文字列、ベクタでもよい。インデックスstartとend は範囲内でなければならず、startはendより大きくてはならない。 endが省略された場合、列の長さを既定とする。戻り値は常にコピーで ある; sequenceと構造を共有しない。
Common Lispへの拡張として、startおよび/またはendは負数でも
よい。その場合、それらは列の終わりからの距離を表現する。これは、Emacs
のsubstring
関数と互換である。subseq
は、負のstartや
endを許す唯一の列関数であることに注意せよ。
要素の指定した範囲を別の列の要素で置き換えるために、subseq
フォーム上でsetf
を使うことができる。置き換えは、以下に記述する
replace
によってのように行なわれる。
この関数は、型result-typeの結果の列を形成するために、引数列を
一緒に連結する。result-typeはシンボルvector
または
string
、list
のいずれかである。引数は、結果が引数と
同一である(concatenate 'list '(1 2 3))
のような場合ですら常に
コピーされる。
この関数は、値itemで列の要素(あるいは列の指定された部分)を満たす。
この関数は、seq2の一部をseq1の一部にコピーする。列 seq1は伸びたり縮んだりしない; コピーされるデータの量は、単に元と 先の(副)列の短い方である。この関数はseq1を戻す。
seq1とseq2がeq
の場合、開始と終了引数で示される
範囲が重なっていても正しく動作する。しかし、seq1とseq2が、
記憶域を共有するがeq
ではないリストであり、開始と終了引数が
重なる範囲を指定する場合、その効果は未定義である。
これは、itemにマッチするすべての要素を取り除いたseqの
コピーを戻す。結果は、ある状況ではseqと記憶域を共有するか
eq
であってもよいが、オリジナルのseqは修正されない。
:test
や:test-not
、:key
引数は使われる
マッチテストを定義する; 既定では、itemとeql
の要素が
取り除かれる。:count
引数は、取り除かれてよいマッチする要素の
最大数を指定する(一番左のcountマッチだけが取り除かれる)。
:start
と:end
引数は、要素が取り除かれるseqの領域を
指定する; 領域の外の要素は、マッチしないか取り除かれない。
:from-end
引数が真の場合、要素は先頭からではなく列の終わりから
削除されるべきだということを表わす(これはcountも指定された
場合にだけ問題となる)。
これは、itemにマッチするseqのすべての要素を削除する。
それは破壊的な作用である。Emacs Lispは、伸縮可能な文字列やベクタを
サポートしないので、これはそれらの列型にはremove*
と同じである。
リストに対しては、remove*
はオリジナルのリストを保存するために
必要な場合はリストをコピーするが、delete*
は引数リストの
部分をつなぐ。append
とnconc
を比較せよ。これらは、Emacs
Lisp中にある類似の非破壊的/破壊的リスト演算である。
述語起源の関数remove-if
やremove-if-not
、delete-if
、
delete-if-not
は同様に定義される。
このMacLisp互換の関数は、itemとequal
なすべての要素を
listから削除する。delete
関数は、Emacs 19へは組み込まれて
いる; このパッケージは、Emacs 18にそれを同等に定義する。
この関数は、itemとequal
なすべての要素をlistから
取り除く。remove
はEmacs 19へは組み込まれていないが、
このパッケージはdelete
との対称のためにそれを定義する。
この関数は、itemとeq
なすべての要素をlistから
取り除く。remq
はEmacs 19へは組み込まれていないが、
このパッケージはdelq
との対称のためにそれを定義する。
この関数は、重複要素を取り除いたseqのコピーを戻す。つまり、
列からの2つの要素が:test
や:test-not
、:key
引数に
従ってマッチする場合、一番右のものだけが保たれる。:from-end
が
真の場合、一番左のものがその代わりに保たれる。:start
または
:end
が指定された場合、その部分列の要素だけが調べられるか
取り除かれる。
この関数は、seqから重複要素を削除する。それは
remove-duplicates
の破壊的版である。
この関数は、oldとマッチするすべての要素をnewと置き換えた
seqのコピーを戻す。:count
や:start
、:end
、
:from-end
引数は、置き換えが行なわれる数を制限するために使われて
もよい。
これは、substitute
の破壊的版である; それは、列の変更されたコピー
を戻すのではなく、setcar
やaset
を使って置き換えを行なう。
substitute-if
やsubstitute-if-not
、nsubstitute-if
、
nsubstitute-if-not
関数は同様に定義される。これらのために、
predicateがold引数の場所に与えられる。