次: , 前: Lists, 上: Top


6 シーケンス、配列、ベクトル

シーケンス(sequence)型とは、Lispの2つの異なる型の和であることを 思い出してください。 いいかえれば、任意のリストはシーケンスであり、 任意の配列もシーケンスです。 すべてのシーケンスに共通する性質は、 それぞれ、要素の順序付けた集まりであるということです。

配列(array)は、各要素ごとに1つ1つスロットを用意してある 単一の基本オブジェクトです。 すべての要素は一定時間内に参照できますが、既存の配列の長さは変更できません。 文字列、ベクトル、文字テーブル、ブールベクトルは、配列型の4つの型です。

リストは、要素を並べたものですが、 単一の基本オブジェクトではありません。 コンスセルから作られていて、1つの要素あたり1つのセルがあります。 n番目の要素を探すには、n個のコンスセルを調べる必要があるので、 リストの先頭から遠い要素を参照するには余計に時間がかかります。 しかし、リストには要素を追加したり削除したりできます。

以下の図は、これらの型の関係を示します。

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
          ┌────────────────────────┐
          │      シーケンス             │
          │┌───┐ ┌───────────────┐ │
          ││   │ │               │ │
          ││リスト│ │      配列       │ │
          ││   │ │ ┌────┐ ┌───┐  │ │
          ││   │ │ │    │ │   |  │ │
          │└───┘ │ │ベクトル│ │文字列|  │ │
          │      │ │    │ │   |  │ │
          │      │ └────┘ └───┘  │ │
          │      │ ┌────┐ ┌────┐ │ │
          │      │ │文字  │ │ブール │ │ │
          │      │ │テーブル│ │ベクトル│ │ │
          │      │ └────┘ └────┘ │ │
          │      └───────────────┘ │
          └────────────────────────┘

ベクトルやリストの要素は、どんなLispオブジェクトでもかまいません。 文字列の要素はすべて文字です。