Function ADJUST-ARRAY

UP


Function ADJUST-ARRAY

Function ADJUST-ARRAY

構文

adjust-array array new-dimensions &key element-type initial-element initial-contents fill-pointer displaced-to displaced-index-offset => adjusted-array

引数と戻り値

array - 配列
new-dimensions - 有効な配列の大きさか、 有効な配列の大きさのリストの指定子
element-type - 型指定子
initial-element - オブジェクト。 もしinitial-contentsdisplaced-toが指定されたときは、 initial-elementは指定してはいけません。
initial-contents - オブジェクト。 もしarrayのランクがゼロより大きいときは、 initial-contentsはシーケンスのネストによって構成されたものであり、 その深さはarrayのランクと等しくなければなりません。 それ以外のときは、arrayはゼロ次元であり initial-contentsはひとつの要素を指定します。 もしinitial-elementdisplaced-toが与えられたときは、 initial-contentsを指定してはいけません。
fill-pointer - 作成される配列の有効なfill-pointerか、 tか、nil。 デフォルトはnil
displaced-to - 配列か、nil。 デフォルトはnil。 もしdisplaced-toが指定されたら、 initial-elementinitial-contentsは指定できません。
displaced-index-offset - 型(fixnum 0 n)のオブジェクトであり、 n(array-total-size displaced-to)で表されます。 もしdisplaced-toが指定されたときのみ、 displaced-index-offsetを指定できます。
adjusted-array - 配列

定義

adjust-arrayarrayの次元か要素を変更します。 その返却値はarrayと同じ型とランクの配列であり、 arrayが修正されたものか新しく生成された配列のいずれかであり、 またarraydisplacedにできますし、 与えられたnew-dimensionsを持つようにもできます。

new-dimensionsarrayの各次元のサイズです。

element-typeは結果の配列の要素の型を指定します。 もしelement-typeが指定されたとき、 arrayの実際の配列の要素の型と element-typeのアップグレードされた配列の要素の型が 等しくないときの結果は未定義です。

もしinitial-contentsが指定されたとき、 それはmake-arrayと同じように扱われます。 このような場合、arrayの元の内容は結果の配列には現れません。

もしfill-pointerが整数のとき、 それは結果の配列のfill-pointerになります。 もしfill-pointerがシンボルのtのとき、 それは結果の配列のサイズがfill-pointerとして使われるべきことを示します。 もしfill-pointernilのときは、 それはfill-pointerではなくなることを示します。

もしdisplaced-tonilではないとき、 displacedの配列が生成されます。 結果の配列はdisplaced-toによって与えられた配列の内容を共有します。 結果の配列はdisplaced-toの配列よりも多い要素を含むことができません。 もしdisplaced-toが指定されなかったか、あるいはnilのとき、 結果の配列はdisplacedの配列ではありません。 もし配列Aが配列Bdisplacedとして生成され、 続いて配列Badjust-arrayに与えられたら、 Aはまだ配列Bdisplacedしています。 arraydisplacedの配列であっても、 displaced-toが指定されないか、 あるいはnilがしていされたときは、 結果の配列はdisplacedの配列ではありません。 このadjust-arraydisplacedの配列の相互作用は、 下記の3つの配列、A, B, Cによって与えられます。

もしdisplaced-index-offsetが指定されたとき、 それはdisplacedの配列の開始位置からの 結果の配列のオフセットとして指定します。 もしdisplaced-index-offsetが指定されなかったとき、オフセットは0です。 結果の配列のサイズとオフセットを加算した値は、 displacedの配列のサイズを越えることはできません。

もしnew-dimensionsinitial-elementの引数のみが与えられたとき、 それらのarrayの要素は、まだ結果の配列の境界内に現れます。 配列の境界内にはない結果の配列の要素は、 initial-elementによって初期化されます。 もしinitial-elementが指定されなかったとき、 new-arrayが初期化される前にそのような新しい要素を あとで読み込んだときの結果は未定義です。

もしinitial-contentsdisplaced-toが指定されたとき、 arrayの元の内容は新しい配列には現れません。

もしfill-pointerの引数を指定せずに arrayをそのfill-pointerをより小さいサイズに調整し、 ある処理においてfill-pointerが 適切に調整されたときの結果は不定です。

もしABdisplacedの配列であり、 もしBAにとって十分な要素を満たさないような方法で 調整されたときの結果は不定です。

もしadjust-arrayを実際にadjustableな配列に対して適用したとき、 返却される配列はarrayと同一です。 もしadjust-arrayによって返却される配列が arrayと同一ではないときは、 引数のarrayは変更されません。

もし配列Aが別の配列Bdisplacedとして指定しており、 配列Bが別の配列Cdisplacedとして指定しているとき、 Badjust-arrayによって変更されたときは、 Aはその時点で修正されたBの内容を参照する 必要があることに注意してください。 これは、実装はAの参照を直接Cに結び付けて、 Bの参照を通すことを無視するような 破綻した修正をしてはいけないという意味です。 しかし、ここで示された意味を守るようにした キャッシュの実装は許されます。

例文

(adjustable-array-p
 (setq ada (adjust-array
             (make-array '(2 3)
                         :adjustable t
                         :initial-contents '((a b c) (1 2 3)))
             '(4 6)))) =>  T 
(array-dimensions ada) =>  (4 6) 
(aref ada 1 1) =>  2 
(setq beta (make-array '(2 3) :adjustable t))
=>  #2A((NIL NIL NIL) (NIL NIL NIL)) 
(adjust-array beta '(4 6) :displaced-to ada)
=>  #2A((A B C NIL NIL NIL)
      (1 2 3 NIL NIL NIL)
      (NIL NIL NIL NIL NIL NIL) 
      (NIL NIL NIL NIL NIL NIL))
(array-dimensions beta) =>  (4 6)
(aref beta 1 1) =>  2 

4×4の配列であるmは下記のようになると仮定します。

#2A(( alpha     beta      gamma     delta )
    ( epsilon   zeta      eta       theta )
    ( iota      kappa     lambda    mu    )
    ( nu        xi        omicron   pi    ))

このとき、次に文を考えます。

(adjust-array m '(3 5) :initial-element 'baz)

結果は3×5の配列になり、内容は次の通り。

#2A(( alpha     beta      gamma     delta     baz )
    ( epsilon   zeta      eta       theta     baz )
    ( iota      kappa     lambda    mu        baz ))

影響

なし。

例外

fill-pointernilで指定されたにもかかわらず、 arrayがfill-pointerを持たないときは、 型errorのエラーが発生します。

参考

adjustable-array-p, make-array, array-dimension-limit, array-total-size-limit, array

備考

なし。


TOP, Github