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


9.4 列の検索

これらの関数は、列の中で要素や部分列を検索する(member*assoc*も参照; see リスト)。

Function: find item seq &key :test :test-not :key :start :end :from-end

この関数は、itemとマッチする要素を見つけるためにseqを検索 する。マッチが見つかった場合、マッチした要素を戻す。そうでなければ、 nilを戻す。:from-endが真でない場合、一番左のマッチを戻す。 :from-endが真の場合、一番右のマッチを戻す。:start:end引数は、検索される要素の範囲を制限するために使用してもよい。

Function: position item seq &key :test :test-not :key :start :end :from-end

この関数はfindと似ているが、項目自身ではなく、マッチする項目の 列の中の位置を示す整数を戻す点が異なる。:startが0でない 場合でさえ、位置は全体として列の開始から相対である。マッチする要素が 見つからない場合、この関数はnilを返す。

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

この関数は、itemとマッチするseqの要素の数を戻す。結果は 常に負ではない整数である。

find-iffind-if-notposition-ifposition-if-notcount-ifcount-if-notは同様に 定義される。

Function: mismatch seq1 seq2 &key :test :test-not :key :start1 :end1 :start2 :end2 :from-end

この関数は、seq1seq2の指定された部分を比較する。それらが 同じ長さで、対応する要素が(:test:test-not:key に従って)マッチする場合、この関数はnilを戻す。ミスマッチがある 場合、この関数は第1のミスマッチ要素の(seq1に相対な)インデクスを 戻す。これは、マッチしない一番左の要素のペアか、2つの非マッチ列の短い 方が尽きた場所である。

:from-endが真の場合、要素は(1- end1)(1- end2)から始まり右から左へ比較される。列が異なる場合、 一番右の(seq1に相対な)相違のインデクスに1を加えた値が戻される。

興味深い例は(mismatch str1 str2 :key 'upcase)であり、これは 大文字小文字を区別せずに2つの文字列を比較する。

Function: search seq1 seq2 &key :test :test-not :key :from-end :start1 :end1 :start2 :end2

この関数は、seq1(あるいは:start1:end1で 指定された部分)とマッチする部分列を見つけるためにseq2を 検索する。:start2:end2で定義される領域内に完全に入る マッチのみが考慮される。戻り値は、seq2の開始に相対な一番左 マッチの一番左の要素のインデクスか、マッチが見つからない場合は nilである。:from-endが真の場合、この関数は 一番右のマッチする部分列を見つける。