(rontolisp) docs
← cl パッケージの関数

vector-push-extend

(vector-push-extend value vector &optional extension)

vector-push と同様ですが、ベクタが満杯の場合に nil を返す代わりにバッキングストレージを拡張するため、プッシュは常に成功し、新しいインデックスが返されます。:adjustable で作成されたかどうかに関係なく、フィルポインタを持つ任意のベクタを拡張できます (一般的な慣行に合わせています。adjustable-array-p はフラグをそのまま報告します)。フィルポインタのないベクタには type-error を通知します (fill-pointer)。

extension は拡張する要素数で、容量にそのまま加算されます。省略した場合は容量が 2 倍になります (容量 0 のベクタは 1 に拡張されます)。そのため、プッシュのループはプッシュ回数に対して線形のままです。新しい容量はすべてのバックエンドで同一であり、array-dimension で観測できます。

拡張はプッシュされた要素と新しい容量の間のスロットを開けます。これらは配列の次元より下にあるため aref で読み取ることができ、そのベクタの要素型自身のゼロ値を保持します。これは make-array が値を指定されなかった要素に与える値と同じです。文字ベクタなら #\Space、宣言された整数幅や浮動小数点型なら 0 または 0.0、要素型 t なら nil です。