CARとCDR

は、LISP言語の基本的なデータ型であるリストを操作するためのもっとも基本的な2つの関数である。LISP言語のリストはコンスセルと呼ばれる（ペアまたはドット対とも呼ばれる）二分木構造セルにより表現され、CARは二分木の片側を返しこれはリストの先頭の要素である。またCDRは二分木のもう片側を返しこれは後続する二分木セルである。
名前と語源.
codice_1 はと発音され、codice_2 はと発音される。
この不可解な名称は、最初にLISPが開発されたIBM 704の命令形式に由来する。IBM 704は36ビット・ワードの機械で、タイプAの命令形式ではこれを3ビットのプレフィックス（オペコード）、15ビットのデクリメント、3ビットのタグ、15ビットのアドレスの4つの部分に分けて用いた。codice_1 は「レジスターのアドレス部の中身」を、codice_2は「レジスターのデクリメント部の中身」を意味する略語だった。現在ではこの名称は無意味なものになっている。
Common Lispでは、より意味のあるcodice_5（「最初のもの」を意味する）およびcodice_6（「残りのもの」を意味する）という関数も用意されているが、古い名称もひき続き使われている。
概要.
LISPにおいて、コンス（またはペア、またはドット対）は2つの要素を持つ順序対である。1番目の要素をCAR、2番目の要素をCDRと呼ぶ。リストは「空リスト codice_7 または CDRがリストであるところのコンスセル」であると再帰的に定義される。
具体的にいうと、要素 codice_8 と codice_9 から構成されるコンスは codice_10 と表され、リスト codice_11 は、各要素を codice_12 関数で取り出せるところのコンスセルと、後続のコンスセルを codice_13 関数で取り出せるところの片方向リスト、すなわち codice_14 として実現されている。したがって、リストの先頭の要素を得るのは、最後の要素を得るのに比べて効率がよい。
リスト codice_15 の2番目の要素は codice_16、3番目の要素は codice_17 のようにして得られる。
関数 codice_12 と codice_13 の引数が空リスト codice_7 である場合、Common Lispでは空リストを返す。Schemeではエラーになる。
応用.
codice_12とcodice_13を再帰や条件分岐と組み合わせることで、リスト関係のさまざまな関数を作ることができる。
たとえば、リストの最後の要素を得る codice_23 関数は、
 (if (consp (cdr L)) ; L のCDR部分がコンスセルである場合
 (last (cdr L))
 (car L)))
リストの長さを得る関数 codice_24 は、
 (if (null L) ; L が空リストである場合
 0
 (+ 1 (length (cdr L)))))
のように定義できる。