Next: Building Lists, Previous: List-related Predicates, Up: Lists [Contents][Index]
この関数は、コンスセルcons-cellの1番目のスロットにより参照される値をreturnします。他の言い方をすると、この関数はcons-cellのCARをreturnします。
特別なケースとして、cons-cellがnil
の場合、この関数はnil
をreturnします。したがって、リストはすべて引数として有効です。引数がコンスセルでもnil
でもない場合、エラーがシグナルされます。
(car '(a b c)) ⇒ a
(car '()) ⇒ nil
この関数は、コンスセルcons-cellの2番目のスロットにより参照される値をreturnします。他の言い方をすると、この関数はcons-cellのCDRをreturnします。
特別なケースとして、cons-cellがnil
の場合、この関数はnil
をreturnします。したがって、リストはすべて引数として有効です。引数がコンスセルでもnil
でもない場合、エラーがシグナルされます。
(cdr '(a b c)) ⇒ (b c)
(cdr '()) ⇒ nil
この関数により、他のデータ型によるエラーを起こさずに、コンスセルのCARを取得できます。この関数は、objectがコンスセルの場合はobjectのCAR、それ以外はnil
をreturnします。この関数は、objectがリスとでないときはエラーをシグナルするcar
とは対象的です。
(car-safe object) ≡ (let ((x object)) (if (consp x) (car x) nil))
この関数により、他のデータ型によるエラーを起こさずに、コンスセルのCDRを取得できます。この関数は、objectがコンスセルの場合はobjectのCDR、それ以外はnil
をreturnします。この関数は、objectがリスとでないときはエラーをシグナルするcdr
とは対象的です。
(cdr-safe object) ≡ (let ((x object)) (if (consp x) (cdr x) nil))
このマクロはリストのCARを調べて、それをリストから取り去るのを1度に行なう便利な方法を提供します。この関数はlistnameに格納されたリストにたいして処理を行ないます。この関数はリストから1番目の要素を削除して、CDRをlistnameに保存し、その後で削除した要素をreturnします。
1番単純なケースは、リストに名前をつけるためのクォートされていないシンボルの場合です。この場合、このマクロは(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番目の要素をreturnします。要素は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をreturnします。他の言い方をすると、この関数はlistの最初のn個のリンクをスキップしてから、それ以降をreturnします。
nが0の場合、nthcdr
はlist全体をreturnします。listの長さがn以下の場合、nthcdr
はnil
をreturnします。
(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の最後のリンクをreturnします。このリンクのcar
は、このリストの最後の要素です。listがnullの場合、nil
がreturnされます。nが非nil
の場合、n番目から最後までのリンクがreturnされます。nがlistの長さより大きい場合は、list全体がreturnされます。
この関数は、エラーや無限ループの危険なしで、listの長さをreturnします。この関数は一般的に、リスト内のコンスセルの個数をreturnします。しかし循環リストでは、単に上限値が値となるため、非常に大きくなる場合があります。
listがnil
でもコンスセルでもない場合、safe-length
は0をreturnします。
循環リストを考慮しなくてもよい場合に、リストの長さを計算するもっとも一般的な方法は、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)
と同じです。
この関数は、リストxから、最後の要素、または最後のn個の要素を削除してreturnします。nが0より大きい場合、この関数はリストのコピーを作成するので、元のリストに影響はありません。一般的に、(append
(butlast x n) (last x
n))
は、xと等しいリストをreturnします。
この関数は、リストのコピーを作成するのではなく、cdr
を適切な要素に変更することにより破壊的に機能するバージョンのbutlast
です。
Next: Building Lists, Previous: List-related Predicates, Up: Lists [Contents][Index]