make-array
(make-array dimensions &key initial-element initial-contents element-type fill-pointer adjustable displaced-to displaced-index-offset)
新しい配列を作成して返します。dimensions はランク 1 のベクタの場合は整数、任意のランクの配列の場合は空でない整数のリストです。:initial-element はすべてのセルを指定した値に設定します。デフォルトは nil です。要素は行優先で格納され、aref を介して O(1) でアクセスできます。配列は同一性 (eq) で比較されるため、異なる 2 つの配列が equal になることはありません。make-array と aref は第一級の関数値ではありません。#'make-array は利用できないため、直接呼び出してください。
:fill-pointer (ランク 1 のみ) はベクタにフィルポインタを与えます。整数はその位置に、t はベクタサイズに設定します。フィルポインタは実効長であり、length や印字はフィルポインタで止まります (aref はストレージ全体にアクセスできます)。vector-push/vector-pop/vector-push-extend が操作するのもこのフィルポインタです。:adjustable は配列を可変長としてマークし、adjustable-array-p がそのまま報告します。可変長配列は adjust-array でその場でリサイズされます。:initial-contents は (入れ子の場合もある) シーケンスから配列を充填します (row-major。すべてのバックエンドで、任意のランクに対応)。:element-type 'double-float/'single-float (フィルポインタ/可変長/displacement なし) はパックド浮動小数点表現を選択し、同じ条件の :element-type 'character は文字列を作ります (ランク 1 の文字配列は文字列そのものであり、make-string の結果と同じ形です)。:fill-pointer/:adjustable 付きの :element-type 'character は、すべてのバックエンドでフィルポインタ付きの可変文字列を作ります: vector-push-extend で文字を追加でき、replace と (setf (char ...)) はその場に書き込み、文字列として印字・比較 (string=/equal、equal ハッシュ表のキー) され、stringp を満たします。:initial-contents 付きの :element-type 'character は内容 (文字列、可変文字列、または文字のリスト) を新しい単純文字列にコピーします。ランク 1 の配列に対するリテラルの :element-type '(unsigned-byte 8)、'(unsigned-byte 16)、'(unsigned-byte 32) (同じくフィルポインタ/可変長/displacement なし) はパックド符号なし整数ベクタを選択します: 格納は値を要素幅にマスクし (2 の補数での切り詰め)、読み出しは符号なしに拡大して返し、整数以外の格納はエラーになります。array-element-type は実際の (unsigned-byte n) 指定子を報告します。パックドベクタの subseq と copy-seq は同じ幅のパックドベクタのままです。引数なしの deftype 名はこれらの判定より先に解決されるため、別名を書いても展開先を書いたときとまったく同じ表現が選ばれます。それ以外の要素型は受け付けられますが無視されます (要素型はそれ以外では追跡されません。一般配列では array-element-type は t を返します)。
:displaced-to は、ストレージを割り当てる代わりに別の配列のストレージへのビューを構築します。ビューの (行優先の) 要素 i はターゲットの要素 i + offset を読み書きします (:displaced-index-offset のデフォルトは 0)。変更は双方向に見えます。ビューは独自の次元を持ち (ターゲットとランクが異なってもよく、例えば行列の行に対するベクタビューが作れます)、ターゲット内に収まる必要があり、array-displacement で調べられます。displaced ビューは :fill-pointer/:adjustable/:initial-element と併用できず、それ自体を adjust することもできません。