% Accessor CAR, CDR, CAAR, CADR, CDAR, CDDR, CAAAR, CAADR, CADAR, CADDR, CDAAR, CDADR, CDDAR, CDDDR, CAAAAR, CAAADR, CAADAR, CAADDR, CADAAR, CADADR, CADDAR, CADDDR, CDAAAR, CDAADR, CDADAR, CDADDR, CDDAAR, CDDADR, CDDDAR, CDDDDR
Accessor CAR
, CDR
,
CAAR
, CADR
, CDAR
, CDDR
,
CAAAR
, CAADR
, CADAR
, CADDR
,
CDAAR
, CDADR
, CDDAR
, CDDDR
,
CAAAAR
, CAAADR
, CAADAR
, CAADDR
,
CADAAR
, CADADR
, CADDAR
, CADDDR
,
CDAAAR
, CDAADR
, CDADAR
, CDADDR
,
CDDAAR
, CDDADR
, CDDDAR
, CDDDDR
car
x => object
cdr
x => object
caar
x => object
cadr
x => object
cdar
x => object
cddr
x => object
caaar
x => object
caadr
x => object
cadar
x => object
caddr
x => object
cdaar
x => object
cdadr
x => object
cddar
x => object
cdddr
x => object
caaaar
x => object
caaadr
x => object
caadar
x => object
caaddr
x => object
cadaar
x => object
cadadr
x => object
caddar
x => object
cadddr
x => object
cdaaar
x => object
cdaadr
x => object
cdadar
x => object
cdaddr
x => object
cddaar
x => object
cddadr
x => object
cdddar
x => object
cddddr
x => object
(setf
(car
x) new-object)
(setf
(cdr
x) new-object)
(setf
(caar
x) new-object)
(setf
(cadr
x) new-object)
(setf
(cdar
x) new-object)
(setf
(cddr
x) new-object)
(setf
(caaar
x) new-object)
(setf
(caadr
x) new-object)
(setf
(cadar
x) new-object)
(setf
(caddr
x) new-object)
(setf
(cdaar
x) new-object)
(setf
(cdadr
x) new-object)
(setf
(cddar
x) new-object)
(setf
(cdddr
x) new-object)
(setf
(caaaar
x) new-object)
(setf
(caaadr
x) new-object)
(setf
(caadar
x) new-object)
(setf
(caaddr
x) new-object)
(setf
(cadaar
x) new-object)
(setf
(cadadr
x) new-object)
(setf
(caddar
x) new-object)
(setf
(cadddr
x) new-object)
(setf
(cdaaar
x) new-object)
(setf
(cdaadr
x) new-object)
(setf
(cdadar
x) new-object)
(setf
(cdaddr
x) new-object)
(setf
(cddaar
x) new-object)
(setf
(cddadr
x) new-object)
(setf
(cdddar
x) new-object)
(setf
(cddddr
x) new-object)
cadr
: [‘ka,duhr]
caddr
: [‘kaduh,duhr] or [‘ka,dduhr]
cdr
: [‘k,duhr]
cddr
: [‘kduh,duhr] or [‘kuh,dduhr]
x - リスト
object - オブジェクト
new-object - オブジェクト
xがコンスなら、car
はconsのcar
を返します。
xがnil
なら、 car
はnil
を返します。
xがコンスなら、cdr
はconsのcdr
を返します。
xがnil
なら、 cdr
はnil
を返します。
最大4つのcar
とcdr
の組み合わせを行う関数が用意されています。
これらの名前は、C
に続き、2つか3つか4つのA
かD
が現れ、
最後のR
で構成されます。
各関数の名前にあるA
とD
の並びは、
その関数によって実行される一連のcar
, cdr
のオペレーションの
識別を意味しています。
A
とD
の順序は、対応するオペレーションの実行順序とは逆に現れます。
次の図は、その関係を正確に定義したものです。
これは、 ここと等価です
-----------------------------------------
(caar x) (car (car x))
(cadr x) (car (cdr x))
(cdar x) (cdr (car x))
(cddr x) (cdr (cdr x))
(caaar x) (car (car (car x)))
(caadr x) (car (car (cdr x)))
(cadar x) (car (cdr (car x)))
(caddr x) (car (cdr (cdr x)))
(cdaar x) (cdr (car (car x)))
(cdadr x) (cdr (car (cdr x)))
(cddar x) (cdr (cdr (car x)))
(cdddr x) (cdr (cdr (cdr x)))
(caaaar x) (car (car (car (car x))))
(caaadr x) (car (car (car (cdr x))))
(caadar x) (car (car (cdr (car x))))
(caaddr x) (car (car (cdr (cdr x))))
(cadaar x) (car (cdr (car (car x))))
(cadadr x) (car (cdr (car (cdr x))))
(caddar x) (car (cdr (cdr (car x))))
(cadddr x) (car (cdr (cdr (cdr x))))
(cdaaar x) (cdr (car (car (car x))))
(cdaadr x) (cdr (car (car (cdr x))))
(cdadar x) (cdr (car (cdr (car x))))
(cdaddr x) (cdr (car (cdr (cdr x))))
(cddaar x) (cdr (cdr (car (car x))))
(cddadr x) (cdr (cdr (car (cdr x))))
(cdddar x) (cdr (cdr (cdr (car x))))
(cddddr x) (cdr (cdr (cdr (cdr x))))
Figure 14-6. CARとCDRの対応
setf
は、これらの関数とともに使用することで
xの既存の要素を変更することもできますが、
setf
は新しい要素を作成しません。
よって、例えばsetf
とcar
はコンスのcar
を変更できますが、
しかしsetf
とcar
では、nil
のcar
を変更できません。
同じように、
setf
のcaar
は、
car
がコンスであるコンスに対しては、
コンスのcar
のcar
を変更できますが、
しかしsetf
のcaar
では、
nil
や、
car
がnil
のコンスは、
どちらも変更できません。
引数xは、ドットリストと循環リストが許されます。
(car nil) => NIL
(cdr '(1 . 2)) => 2
(cdr '(1 2)) => (2)
(cadr '(1 2)) => 2
(car '(a b c)) => A
(cdr '(a b c)) => (B C)
なし。
関数car
とcdr
は、
引数がリストではないときは、
型type-error
のエラーが発生します。
その他の関数(caar
, cadr
, …, cddddr
)は、
エラーチェックのために、
car
とcdr
が定義されているように
適切に呼び出されたかのようにふるまう必要があります。
コンスのcar
はrplaca
を使うことによって変更できます。
コンスのcdr
はrplacd
を使うことによって変更できます。
(car x) == (first x)
(cadr x) == (second x) == (car (cdr x))
(caddr x) == (third x) == (car (cdr (cdr x)))
(cadddr x) == (fourth x) == (car (cdr (cdr (cdr x))))