この節は、リスト上、すなわちコンスセルの連鎖上のかなりの数の単純な演算 を記述する。
この関数は、(car (cdr (cdr x)))
と同等である。同様にこの
パッケージは、xxxが4つまでの‘a’および/または‘d’
である、28個のcxxxr
関数すべてを定義する。これらの
関数はすべてsetf
可能であり、それらへの呼び出しは、最大の
効率のためにバイトコンパイラでインラインに展開される。
この関数は、(car x)
の同義語である。同様に、関数
second
、third
、…、tenth
はリストxの
与えられた要素を戻す。
この関数は、(cdr x)
の同義語である。
Common Lispは、この関数はnull
と同様に動作するが、x
が
nil
でもコンスセルでもない場合はエラーを通知するように定義する。
このパッケージは、単にnull
の同義語としてendp
を定義する。
この関数は、(length x)
と正確に同じようにリストxの
長さを戻すが、xが循環リスト(cdr連鎖がnil
で
終端するのではなくループを形成する)の場合、この関数はnil
を戻す
(正規のlength
関数は、循環リストを与えられた場合、はまりこんで
動けなくなるだろう)。
この関数は、リストxの最後のコンスか、最後からn番目のコンス
を戻す。nが省略された場合、1を既定とする。“最後のコンス”は、
そのcdr
が別のコンスセルではない、リストの最初のコンスセルを
意味する(通常のリストでは、最後のコンスのcdr
はnil
である)。xがnil
またはnよりも短い場合、この関数は
nil
を戻す。リストの最後の要素は、
(car (last x))
であることに注意せよ。
Emacs関数last
は、付加引数nを扱わないことを除いて
同じことをする。
この関数は、最後の要素、または最後のn個の要素を取り除いたリスト
xを戻す。nが0より大きい場合、オリジナルのリストに損害を
与えないように、リストのコピーを作る。一般に、
(append (butlast x n) (last x n))
は、
xと等値なリストを戻す。
これは、リストのコピーを作るのではなく、適切な要素のcdr
を破壊的
に修正することで動作するbutlast
の版である。
この関数は、その引数のリストを構成する。最後の引数は、構成される最後の
セルのcdr
になる。従って、(list* a b c)
は(cons a (cons b c))
と同等であり、
(list* a b nil)
は(list a b)
と
同等である。
(この関数は、Common Lispで実際にlist*
と呼ばれることに注意せよ;
member*
やdefun*
のように、このパッケージのために
発明された名前ではない)
sublistがlistの副リストの場合、すなわち、listの
コンスセルの1つとeq
の場合、この関数は、sublistまでで
sublistは含まないlistの部分のコピーを戻す。たとえば、
(ldiff x (cddr x))
はリストx
の最初の2つの要素を戻す。結果
はコピーである; オリジナルのlistは修正されない。sublistが
listの副リストでない場合、list全体のコピーが戻される。
この関数は、リストlistのコピーを戻す。それは、(1 2 . 3)
の
ようなドットリストを正しくコピーする。
この関数は、コンスセルxの木のコピーを戻す。cdr
方向沿いに
だけコピーするcopy-sequence
(やその別名であるcopy-list
)と
は異なり、この関数はcar
とcdr
の両方の方向に沿って(再帰的
に)コピーする。xがコンスセルではない場合、単にxを変えずに
戻す。付加的なvecp引数が真の場合、この関数はコンスセルと
同じように(再帰的に)ベクタをコピーする。
この関数は、コンスセルの2つの木を比較する。xとyがともに
コンスセルの場合、それらのcar
とcdr
が再帰的に比較される。
xもyもコンスセルではない場合、eql
か指定されたテスト
に従って比較される。:key
関数が指定された場合、両方の木の要素に
適用される。See 列.