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

UP


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がコンスなら、carconscarを返します。 xnilなら、 carnilを返します。

xがコンスなら、cdrconscdrを返します。 xnilなら、 cdrnilを返します。

最大4つのcarcdrの組み合わせを行う関数が用意されています。 これらの名前は、Cに続き、2つか3つか4つのADが現れ、 最後のRで構成されます。 各関数の名前にあるADの並びは、 その関数によって実行される一連のcar, cdrのオペレーションの 識別を意味しています。 ADの順序は、対応するオペレーションの実行順序とは逆に現れます。 次の図は、その関係を正確に定義したものです。

これは、        ここと等価です
-----------------------------------------
(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は新しい要素を作成しません。 よって、例えばsetfcarはコンスのcarを変更できますが、 しかしsetfcarでは、nilcarを変更できません。 同じように、 setfcaarは、 carがコンスであるコンスに対しては、 コンスのcarcarを変更できますが、 しかしsetfcaarでは、 nilや、 carnilのコンスは、 どちらも変更できません。

引数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)

影響

なし。

例外

関数carcdrは、 引数がリストではないときは、 型type-errorのエラーが発生します。 その他の関数(caar, cadr, …, cddddr)は、 エラーチェックのために、 carcdrが定義されているように 適切に呼び出されたかのようにふるまう必要があります。

参考

rplaca, first, rest

備考

コンスのcarrplacaを使うことによって変更できます。 コンスのcdrrplacdを使うことによって変更できます。

(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))))

TOP, Github