次: , 前: Lists, 上: Lists


5.1 リストとコンスセル

Lispのリストは基本データ型ではありません。 リストはコンスセル(cons cells)で構成されます。 コンスセルはドット対を表現するデータオブジェクトです。 ドット対は2つのLispオブジェクトを保持、つまり、『指し』ます。 その2つのLispオブジェクトの一方をcar、他方をcdrといいます。 これらの名前は歴史的なものです。 See Cons Cell Typecdrは『クダー』と読みます。

リストはコンスセルを連ねたものであり、 リストの各要素ごとにコンスセルが1つあります。 慣習として、コンスセルのcarはリストの要素であり、 cdrはリストを繋ぐために使います。 つまり、各コンスセルのcdrは後続のコンスセルです。 最後のコンスセルのcdrnilです。 carcdrの非対称性は単なる慣習によるものです。 コンスセルのレベルでは、carcdrには同じ性質があります。

ほとんどのコンスセルはリストの一部として使われるので、 リスト構造(list structure)という用語は、 コンスセルで構成した任意の構造を意味するようになりました。

シンボルnilは、シンボルであるとともにリストでもあるとみなします。 これは要素を持たないリストです。 慣習として、シンボルnilcdr(およびcar)は nilであるとみなします。

空でない任意のリストlcdrは、 lの先頭要素を除くすべての要素を含んだリストです。