Next: , Previous: , Up:   [Contents][Index]


9.3 列関数

この節は、列に作用するかなりの数のCommon Lisp関数を記述する。

Function: subseq sequence start &optional end

この関数は、引数sequenceの与えられた部分列を戻す。sequence はリストや、文字列、ベクタでもよい。インデックスstartend は範囲内でなければならず、startendより大きくてはならない。 endが省略された場合、列の長さを既定とする。戻り値は常にコピーで ある; sequenceと構造を共有しない。

Common Lispへの拡張として、startおよび/またはendは負数でも よい。その場合、それらは列の終わりからの距離を表現する。これは、Emacs のsubstring関数と互換である。subseqは、負のstartendを許す唯一の列関数であることに注意せよ。

要素の指定した範囲を別の列の要素で置き換えるために、subseq フォーム上でsetfを使うことができる。置き換えは、以下に記述する replaceによってのように行なわれる。

Function: concatenate result-type &rest seqs

この関数は、型result-typeの結果の列を形成するために、引数列を 一緒に連結する。result-typeはシンボルvectorまたは stringlistのいずれかである。引数は、結果が引数と 同一である(concatenate 'list '(1 2 3))のような場合ですら常に コピーされる。

Function: fill seq item &key :start :end

この関数は、値itemで列の要素(あるいは列の指定された部分)を満たす。

Function: replace seq1 seq2 &key :start1 :end1 :start2 :end2

この関数は、seq2の一部をseq1の一部にコピーする。列 seq1は伸びたり縮んだりしない; コピーされるデータの量は、単に元と 先の(副)列の短い方である。この関数はseq1を戻す。

seq1seq2eqの場合、開始と終了引数で示される 範囲が重なっていても正しく動作する。しかし、seq1seq2が、 記憶域を共有するがeqではないリストであり、開始と終了引数が 重なる範囲を指定する場合、その効果は未定義である。

Function: remove* item seq &key :test :test-not :key :count :start :end :from-end

これは、itemにマッチするすべての要素を取り除いたseqの コピーを戻す。結果は、ある状況ではseqと記憶域を共有するか eqであってもよいが、オリジナルのseqは修正されない。 :test:test-not:key引数は使われる マッチテストを定義する; 既定では、itemeqlの要素が 取り除かれる。:count引数は、取り除かれてよいマッチする要素の 最大数を指定する(一番左のcountマッチだけが取り除かれる)。 :start:end引数は、要素が取り除かれるseqの領域を 指定する; 領域の外の要素は、マッチしないか取り除かれない。 :from-end引数が真の場合、要素は先頭からではなく列の終わりから 削除されるべきだということを表わす(これはcountも指定された 場合にだけ問題となる)。

Function: delete* item seq &key :test :test-not :key :count :start :end :from-end

これは、itemにマッチするseqのすべての要素を削除する。 それは破壊的な作用である。Emacs Lispは、伸縮可能な文字列やベクタを サポートしないので、これはそれらの列型にはremove*と同じである。 リストに対しては、remove*はオリジナルのリストを保存するために 必要な場合はリストをコピーするが、delete*は引数リストの 部分をつなぐ。appendnconcを比較せよ。これらは、Emacs Lisp中にある類似の非破壊的/破壊的リスト演算である。

述語起源の関数remove-ifremove-if-notdelete-ifdelete-if-notは同様に定義される。

Function: delete item list

このMacLisp互換の関数は、itemequalなすべての要素を listから削除する。delete関数は、Emacs 19へは組み込まれて いる; このパッケージは、Emacs 18にそれを同等に定義する。

Function: remove item list

この関数は、itemequalなすべての要素をlistから 取り除く。removeはEmacs 19へは組み込まれていないが、 このパッケージはdeleteとの対称のためにそれを定義する。

Function: remq item list

この関数は、itemeqなすべての要素をlistから 取り除く。remqはEmacs 19へは組み込まれていないが、 このパッケージはdelqとの対称のためにそれを定義する。

Function: remove-duplicates seq &key :test :test-not :key :start :end :from-end

この関数は、重複要素を取り除いたseqのコピーを戻す。つまり、 列からの2つの要素が:test:test-not:key引数に 従ってマッチする場合、一番右のものだけが保たれる。:from-endが 真の場合、一番左のものがその代わりに保たれる。:startまたは :endが指定された場合、その部分列の要素だけが調べられるか 取り除かれる。

Function: delete-duplicates seq &key :test :test-not :key :start :end :from-end

この関数は、seqから重複要素を削除する。それは remove-duplicatesの破壊的版である。

Function: substitute new old seq &key :test :test-not :key :count :start :end :from-end

この関数は、oldとマッチするすべての要素をnewと置き換えた seqのコピーを戻す。:count:start:end:from-end引数は、置き換えが行なわれる数を制限するために使われて もよい。

Function: nsubstitute new old seq &key :test :test-not :key :count :start :end :from-end

これは、substituteの破壊的版である; それは、列の変更されたコピー を戻すのではなく、setcarasetを使って置き換えを行なう。

substitute-ifsubstitute-if-notnsubstitute-ifnsubstitute-if-not関数は同様に定義される。これらのために、 predicateold引数の場所に与えられる。


Next: , Previous: , Up:   [Contents][Index]