Next: , Previous: , Up: リスト   [Contents][Index]


10.1 リスト関数

この節は、リスト上、すなわちコンスセルの連鎖上のかなりの数の単純な演算 を記述する。

Function: caddr x

この関数は、(car (cdr (cdr x)))と同等である。同様にこの パッケージは、xxxが4つまでの‘a’および/または‘d’ である、28個のcxxxr関数すべてを定義する。これらの 関数はすべてsetf可能であり、それらへの呼び出しは、最大の 効率のためにバイトコンパイラでインラインに展開される。

Function: first x

この関数は、(car x)の同義語である。同様に、関数 secondthird、…、tenthはリストxの 与えられた要素を戻す。

Function: rest x

この関数は、(cdr x)の同義語である。

Function: endp x

Common Lispは、この関数はnullと同様に動作するが、xnilでもコンスセルでもない場合はエラーを通知するように定義する。 このパッケージは、単にnullの同義語としてendpを定義する。

Function: list-length x

この関数は、(length x)と正確に同じようにリストxの 長さを戻すが、xが循環リスト(cdr連鎖がnilで 終端するのではなくループを形成する)の場合、この関数はnilを戻す (正規のlength関数は、循環リストを与えられた場合、はまりこんで 動けなくなるだろう)。

Function: last* x &option(付加)al n

この関数は、リストxの最後のコンスか、最後からn番目のコンス を戻す。nが省略された場合、1を既定とする。“最後のコンス”は、 そのcdrが別のコンスセルではない、リストの最初のコンスセルを 意味する(通常のリストでは、最後のコンスのcdrnil である)。xnilまたはnよりも短い場合、この関数は nilを戻す。リストの最後の要素は、 (car (last x))であることに注意せよ。

Emacs関数lastは、付加引数nを扱わないことを除いて 同じことをする。

Function: butlast x &optional n

この関数は、最後の要素、または最後のn個の要素を取り除いたリスト xを戻す。nが0より大きい場合、オリジナルのリストに損害を 与えないように、リストのコピーを作る。一般に、 (append (butlast x n) (last x n))は、 xと等値なリストを戻す。

Function: nbutlast x &optional n

これは、リストのコピーを作るのではなく、適切な要素のcdrを破壊的 に修正することで動作するbutlastの版である。

Function: list* arg &rest others

この関数は、その引数のリストを構成する。最後の引数は、構成される最後の セルのcdrになる。従って、(list* a b c)(cons a (cons b c))と同等であり、 (list* a b nil)(list a b)と 同等である。

(この関数は、Common Lispで実際にlist*と呼ばれることに注意せよ; member*defun*のように、このパッケージのために 発明された名前ではない)

Function: ldiff list sublist

sublistlistの副リストの場合、すなわち、listの コンスセルの1つとeqの場合、この関数は、sublistまでで sublistは含まないlistの部分のコピーを戻す。たとえば、 (ldiff x (cddr x))はリストxの最初の2つの要素を戻す。結果 はコピーである; オリジナルのlistは修正されない。sublistlistの副リストでない場合、list全体のコピーが戻される。

Function: copy-list list

この関数は、リストlistのコピーを戻す。それは、(1 2 . 3)の ようなドットリストを正しくコピーする。

Function: copy-tree x &optional vecp

この関数は、コンスセルxの木のコピーを戻す。cdr方向沿いに だけコピーするcopy-sequence(やその別名であるcopy-list)と は異なり、この関数はcarcdrの両方の方向に沿って(再帰的 に)コピーする。xがコンスセルではない場合、単にxを変えずに 戻す。付加的なvecp引数が真の場合、この関数はコンスセルと 同じように(再帰的に)ベクタをコピーする。

Function: tree-equal x y &key :test :test-not :key

この関数は、コンスセルの2つの木を比較する。xyがともに コンスセルの場合、それらのcarcdrが再帰的に比較される。 xyもコンスセルではない場合、eqlか指定されたテスト に従って比較される。:key関数が指定された場合、両方の木の要素に 適用される。See .