Next: Lists as Boxes, Previous: Lists, Up: Lists
Lispのリストは基本データ型ではありません。 リストはコンスセル(cons cells)で構成されます。 コンスセルはドット対を表現するデータオブジェクトです。 ドット対は2つのLispオブジェクトを保持、つまり、『指し』ます。 その2つのLispオブジェクトの一方をcar、他方をcdrといいます。 これらの名前は歴史的なものです。 See Cons Cell Type。 cdrは『クダー』と読みます。
リストはコンスセルを連ねたものであり、
リストの各要素ごとにコンスセルが1つあります。
慣習として、コンスセルのcarはリストの要素であり、
cdrはリストを繋ぐために使います。
つまり、各コンスセルのcdrは後続のコンスセルです。
最後のコンスセルのcdrはnil
です。
carとcdrの非対称性は単なる慣習によるものです。
コンスセルのレベルでは、carとcdrには同じ性質があります。
ほとんどのコンスセルはリストの一部として使われるので、 リスト構造(list structure)という用語は、 コンスセルで構成した任意の構造を意味するようになりました。
シンボルnil
は、シンボルであるとともにリストでもあるとみなします。
これは要素を持たないリストです。
慣習として、シンボルnil
のcdr(およびcar)は
nil
であるとみなします。
空でない任意のリストlのcdrは、 lの先頭要素を除くすべての要素を含んだリストです。