Next: Building Lists, Previous: List-related Predicates, Up: Lists [Contents][Index]
この関数はコンスセルcons-cellの1番目のスロットが参照する値をリターンする。言い換えるとこの関数はcons-cellのCARをリターンする。
特別なケースとしてcons-cellがnilの場合、この関数はnilをリターンする。したがってリストはすべて引数として有効である。引数がコンスセルでもnilでもなければエラーがシグナルされる。
(car '(a b c))
⇒ a
(car '())
⇒ nil
この関数はコンスセルcons-cellの2番目のスロットにより参照される値をリターンする。言い換えるとこの関数はcons-cellのCDRをリターンする。
特別なケースとしてcons-cellがnilの場合、この関数はnilをリターンする。したがってリストはすべて引数として有効である。引数がコンスセルでもnilでもければエラーがシグナルされる。
(cdr '(a b c))
⇒ (b c)
(cdr '())
⇒ nil
この関数により他のデータ型によるエラーを起こさずに、コンスセルのCARを取得できり。この関数はobjectがコンスセルならobjectのCAR、それ以外はnilをリターンする。この関数は、objectがリストでなければエラーをシグナルするcarとは対象的である。
(car-safe object)
≡
(let ((x object))
(if (consp x)
(car x)
nil))
この関数により他のデータ型によるエラーを起こさずに、コンスセルのCDRを取得できる。この関数はobjectがコンスセルならobjectのCDR、それ以外はnilをリターンする。この関数は、objectがリストでないときはエラーをシグナルするcdrとは対象的である。
(cdr-safe object)
≡
(let ((x object))
(if (consp x)
(cdr x)
nil))
このマクロはリストのCARを調べて、それをリストから取り去るのを一度に行なう便利な方法を提供する。この関数はlistnameに格納されたリストにたいして処理を行なう。この関数はリストから1番目の要素を削除して、CDRをlistnameに保存し、その後で削除した要素をリターンする。
もっとも単純なケースは、リストに名前をつけるためのクォートされていないシンボルの場合である。この場合、このマクロは(prog1 (car listname) (setq listname (cdr listname)))と等価である。
x
⇒ (a b c)
(pop x)
⇒ a
x
⇒ (b c)
より一般的なのはlistnameが汎変数(generalized
variable)の場合である。この場合、このマクロはsetfを使用してlistnameに保存する。Generalized Variablesを参照のこと。
リストに要素を追加するpushマクロについてはList Variablesを参照のこと。
この関数はlistのn番目の要素をリターンする。要素は0から数えられるのでlistのCARは要素0になる。listの長さがn以下なら値はnil。
(nth 2 '(1 2 3 4))
⇒ 3
(nth 10 '(1 2 3 4))
⇒ nil
(nth n x) ≡ (car (nthcdr n x))
これは関数eltも類似しているが、任意の種類のシーケンスに適用される。歴史的な理由によりこの関数は逆の順序で引数を受け取る。Sequence Functionsを参照のこと。
この関数はlistのn番目のCDRをリターンする。言い換えると、この関数はlistの最初のn個のリンクをスキップしてから、それ以降をリターンする。
nが0ならnthcdrはlist全体をリターンする。listの長さがn以下ならnthcdrはnilをリターンする。
(nthcdr 1 '(1 2 3 4))
⇒ (2 3 4)
(nthcdr 10 '(1 2 3 4))
⇒ nil
(nthcdr 0 '(1 2 3 4))
⇒ (1 2 3 4)
この関数はlistの最後のリンクをリターンする。このリンクのcarはこのリストの最後の要素。listがnullならnilがリターンされる。nが非nilならn番目から最後までのリンクがリターンされる。nがlistの長さより大きければlist全体がリターンされる。
この関数はエラーや無限ループの危険なしで、listの長さをリターンする。この関数は一般的に、リスト内のコンスセルの個数をリターンする。しかし循環リストでは単に上限値が値となるため、非常に大きくなる場合があります。
listがnil]とコンスセルのいずれでもなければsafe-lengthは0をリターンする。
循環リストを考慮しなくてもよい場合にリストの長さを計算するもっとも一般的な方法は、lengthを使う方法です。Sequence Functionsを参照してください。
これは(car (car cons-cell))と同じ。
これは(car (cdr cons-cell))か(nth 1 cons-cell)と同じ。
これは(cdr (car cons-cell))と同じ。
これは(cdr (cdr cons-cell))か(nthcdr 2 cons-cell)と同じ。
上記に加えてcxxxrやcxxxxrのようなcarとcdrで構成される24の関数が定義されています。ここでxはaかdのいずれかです。cadrとcaddrとcadddrはそれぞれリストの2つ目、3つ目、4つ目の要素です。cl-libは同じものをcl-second、cl-third、cl-fourthという名前で提供しています。List
Functions in Common Lisp Extensionsを参照してください。
この関数はリストxから、最後の要素か最後のn個の要素を削除してリターンする。nが0より大きければこの関数はリストのコピーを作成するので、元のリストに影響はない。一般的に(append
(butlast x n) (last x n))は、xと等しいリストをリターンする。
この関数はリストのコピーを作成するのではなく、cdrを適切な要素に変更することにより破壊的に機能するバージョンのbutlastである。
Next: Building Lists, Previous: List-related Predicates, Up: Lists [Contents][Index]