System Class ARRAY
配列はオブジェクトを直交座標系にしたがって配置されたものを含みます。 配列は、fixnumの集合である{i0, i1, ..., ir-1}と 対応する配列の要素のマッピングを提供します。 ただし0 <= ij < djであり、rは配列のランク、djは配列の大きさjのサイズです。
配列が作成されたとき、プログラムはその生成の要求として、 表現された配列の要素の型と呼ばれる全ての要素に対する特定の型を 宣言することができます。 実装はこの表現された配列の要素の型を生成するために、 型をアップグレードすることが許されており、 実際に配列の要素の型は特定化されます。 upgraded-array-element-type関数をご確認ください。
特定化
array [{element-type | *} [dimension-spec]]
dimension-spec::= rank | * | ({dimension | *}*)
dimension - 有効な配列の大きさ
element-type - 型指定子
rank - 非負のfixnum
これは要素の型、ランク、大きさが それぞれelement-type、rank、dimensionにマッチするような 配列の集合を意味します。
もしelement-typeがシンボルの*のとき、 配列は要素の型に基づいて排他しません。 そうでないときは、配列はelement-typeをアップグレードした結果の 実際の配列の要素の型だけを含みます。 15.1.2.1. 配列のアップグレードをご確認ください。
もしdimension-specがrankのときは、 集合はただランクがrankである配列のみを含みます。 もしdimension-specがdimensionのリストのときは、 集合はただランクがdimensionのリストの長さであり、 dimensionのリストで指定された大きさを持つものを含みます。 この場合、*は対応する大きさのどんな値にもマッチします。 もしdimension-specがシンボルの*のときは、 集合はランクと大きさに基づいて制限しません。
*print-array*, aref, make-array, vector, 2.4.8.12. シャープサイン A, 22.1.3.8. 他の配列の印字
型(array t)は、(array *)の正しいサブタイプであることに注意してください。 この理由は、型(array t)は どんなオブジェクトでも格納できる配列の集合だからです (要素は型tであり、全てのオブジェクトが含まれます)。 一方、型(array *)は何でもいい全ての配列の集合であり、 それは例えば文字のみを格納できる配列が含まれます。 型(array character)は、型(array t)のサブタイプではありません。 それらの2つの集合は互いに素であり、 なぜなら型(array character)は文字を格納できる全ての集合ではなく、 厳密に文字を格納できてその他のオブジェクトは格納できないという 特定化された配列の集合だからです。