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


5.3 Accessing Elements of Lists

Function: car cons-cell

この関数は、コンスセルcons-cellの1番目のスロットにより参照される値をreturnします。他の言い方をすると、この関数はcons-cellCARをreturnします。

特別なケースとして、cons-cellnilの場合、この関数はnilをreturnします。したがって、リストはすべて引数として有効です。引数がコンスセルでもnilでもない場合、エラーがシグナルされます。

(car '(a b c))
     ⇒ a
(car '())
     ⇒ nil
Function: cdr cons-cell

この関数は、コンスセルcons-cellの2番目のスロットにより参照される値をreturnします。他の言い方をすると、この関数はcons-cellCDRをreturnします。

特別なケースとして、cons-cellnilの場合、この関数はnilをreturnします。したがって、リストはすべて引数として有効です。引数がコンスセルでもnilでもない場合、エラーがシグナルされます。

(cdr '(a b c))
     ⇒ (b c)
(cdr '())
     ⇒ nil
Function: car-safe object

この関数により、他のデータ型によるエラーを起こさずに、コンスセルのCARを取得できます。この関数は、objectがコンスセルの場合はobjectCAR、それ以外はnilをreturnします。この関数は、objectがリスとでないときはエラーをシグナルするcarとは対象的です。

(car-safe object)
≡
(let ((x object))
  (if (consp x)
      (car x)
    nil))
Function: cdr-safe object

この関数により、他のデータ型によるエラーを起こさずに、コンスセルのCDRを取得できます。この関数は、objectがコンスセルの場合はobjectCDR、それ以外はnilをreturnします。この関数は、objectがリスとでないときはエラーをシグナルするcdrとは対象的です。

(cdr-safe object)
≡
(let ((x object))
  (if (consp x)
      (cdr x)
    nil))
Macro: pop listname

このマクロはリストのCARを調べて、それをリストから取り去るのを1度に行なう便利な方法を提供します。この関数はlistnameに格納されたリストにたいして処理を行ないます。この関数はリストから1番目の要素を削除して、CDRlistnameに保存し、その後で削除した要素を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を参照してください。

Function: nth n list

この関数は、listn番目の要素をreturnします。要素は0から数えられるので、listCARは要素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を参照してください。

Function: nthcdr n list

この関数は、listn番目のCDRをreturnします。他の言い方をすると、この関数はlistの最初のn個のリンクをスキップしてから、それ以降をreturnします。

nが0の場合、nthcdrlist全体をreturnします。listの長さがn以下の場合、nthcdrnilを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)
Function: last list &optional n

この関数は、listの最後のリンクをreturnします。このリンクのcarは、このリストの最後の要素です。listがnullの場合、nilがreturnされます。nが非nilの場合、n番目から最後までのリンクがreturnされます。nlistの長さより大きい場合は、list全体がreturnされます。

Function: safe-length list

この関数は、エラーや無限ループの危険なしで、listの長さをreturnします。この関数は一般的に、リスト内のコンスセルの個数をreturnします。しかし循環リストでは、単に上限値が値となるため、非常に大きくなる場合があります。

listnilでもコンスセルでもない場合、safe-lengthは0をreturnします。

循環リストを考慮しなくてもよい場合に、リストの長さを計算するもっとも一般的な方法は、lengthを使うことです。Sequence Functionsを参照してください。

Function: caar cons-cell

これは、(car (car cons-cell))と同じです。

Function: cadr cons-cell

これは、(car (cdr cons-cell))または(nth 1 cons-cell)と同じです。

Function: cdar cons-cell

これは、(cdr (car cons-cell))と同じです。

Function: cddr cons-cell

これは、(cdr (cdr cons-cell))または(nthcdr 2 cons-cell)と同じです。

Function: butlast x &optional n

この関数は、リストxから、最後の要素、または最後のn個の要素を削除してreturnします。nが0より大きい場合、この関数はリストのコピーを作成するので、元のリストに影響はありません。一般的に、(append (butlast x n) (last x n))は、xと等しいリストをreturnします。

Function: nbutlast x &optional n

この関数は、リストのコピーを作成するのではなく、cdrを適切な要素に変更することにより破壊的に機能するバージョンのbutlastです。


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