■set/3
【構文】
set(I :: array_indx(), Value :: term(), Array :: array()) -> array()
インデックス I に対して、Valueを設定する。
以下の場合はエラー:badargを返す。
- インデックス I が負の値
- arrayプロセスがfixedであり、インデックス I が最大サイズ以上のとき
arrayプロセスがfixedでなく、インデックス I がsize(Array)-1より大きい場合は、arrayプロセスはI+1サイズに拡張される。
■relax/1
【構文】relax(Array::array()) -> array()
arrayプロセスを拡張可能にする。
■fix/1
【構文】fix(Array::array()) -> array()
arrayプロセスを固定サイズに設定する。arrayプロセスが自動的に拡張されることを防ぐ。
実行例)
3> A1 = array:new(2).
{array,2,0,undefined,10} % arrayプロセス生成
4> A2 = array:set(1,2,A1). % index = 1 に value = 2 を設定
{array,2,0,undefined,
{undefined,2,undefined,undefined,undefined,undefined,
undefined,undefined,undefined,undefined}}
5> A3 = array:set(0,3,A2). % index = 0 に value = 3 を設定
{array,2,0,undefined,
{3,2,undefined,undefined,undefined,undefined,undefined,
undefined,undefined,undefined}}
6> A4 = array:set(2,3,A3). % index = 2 に value = 3 を設定 → fixedのためbadargエラー
** exception error: bad argument
in function array:set/3
8> array:is_fix(A3). % fixedかどうか調べる
true
10> A4 = array:relax(A3). % 拡張可能にする
{array,2,10,undefined,
{3,2,undefined,undefined,undefined,undefined,undefined,
undefined,undefined,undefined}}
11> array:fix(A4). % fixedする
{array,2,0,undefined,
{3,2,undefined,undefined,undefined,undefined,undefined,
undefined,undefined,undefined}}
12> array:set(2,5,A4). % index = 2 に value = 5 を設定 → 拡張可能なため、OK。
{array,3,10,undefined, % arrayプロセスのサイズが 3 (= I + 1)となっている
{3,2,5,undefined,undefined,undefined,undefined,undefined,
undefined,undefined}}
13> array:set(11,5,A4). % index = 11 に value = 5 を設定 → 拡張可能なため、OK
{array,12,100,undefined, % arrayプロセスのサイズが 12 (= I + 1)となっている
{{3,2,undefined,undefined,undefined,undefined,undefined,
undefined,undefined,undefined},
{undefined,5,undefined,undefined,undefined,undefined,
undefined,undefined,undefined,undefined},
10,10,10,10,10,10,10,10,10}}