2012年1月8日日曜日

Erlang arrayモジュール まとめ(array:new)

Erlangのarrayモジュールについて、ちょっと書きたいと思う。

R14B01のarrayモジュール一覧を下記に示す。

default/1            fix/1                foldl/3            
foldr/3              from_list/1          from_list/2        
from_orddict/1       from_orddict/2       get/2              
is_array/1           is_fix/1             map/2              
module_info/0        module_info/1        new/0              
new/1                new/2                relax/1            
reset/2              resize/1             resize/2          
set/3                size/1               sparse_foldl/3    
sparse_foldr/3       sparse_map/2         sparse_size/1      
sparse_to_list/1     sparse_to_orddict/1  to_list/1          
to_orddict/1      

今回はnew関数について、ドキュメントを参照しつつ、Eshell?で動かしてみた。

■new/0
new()->array()

【説明】
arrayプロセスの新規生成。サイズは0。サイズを拡張可能。

例)
8> A2 = array:new().
{array,0,10,undefined,10}
9> A2.
{array,0,10,undefined,10}
10> array:size(A2).
0

■new/1
new(Options::term()) -> array()

【説明】
オプションの指定に基づいて、arrayプロセスを生成。デフォルトは、拡張可能なサイズ0のもの。indexは0から指定する。

【オプション】
オプションは単一のタプルもしくは複数のタプルのリストで指定可能。

N::integer() or {size, N::integer()}
→arrayの初期サイズ。Nが負の整数の場合、bad argumentエラー(badarg)。


例)
11> A3 = array:new(-1).
** exception error: bad argument
in function array:new_1/4

12> A3 = array:new(0).
{array,0,0,undefined,10}

13> A4 = array:new(4).
{array,4,0,undefined,10}

14> A5 = array:new({size,4}).
{array,4,0,undefined,10}


fixed or {fixed, true}
→固定サイズのarrayプロセスを生成。

例)
20> A8 = array:new([{size,5},{fixed,true}]).
{array,5,0,undefined,10}
23> array:is_fix(A8).
true

27> A9 = array:new().
{array,0,10,undefined,10}
28> array:is_fix(A9).
false

{fixed, false}
→拡張可能なarrayプロセスを生成。

例)
29> A10 = array:new([{size,2},{fixed,false}]).
{array,2,10,undefined,10}

30> array:is_fix(A10).
false

{default, Value}
→初期値Valueのarrayプロセスを生成。
例)
31> A11 = array:new([{size,2},{default,10}]).
{array,2,0,10,10}

33> A12 = array:new({size,2}).
{array,2,0,undefined,10}

■new/2
new(Size::integer(), Options::term()) -> array()

【説明】
オプションとサイズに基づいて、arrayプロセスを新規生成する。
Sizeが負の整数の場合、badargエラーである。
固定サイズで生成される。
注意:オプションでサイズを指定すれば、そのサイズで上書きされ、arrayプロセスが生成される。

例)
35> A13 = array:new([10,{default,0}]).
{array,10,0,0,10}
37> array:set(2,5,A13).
{array,10,0,0,{0,0,5,0,0,0,0,0,0,0}}

38> A14 = array:new(10).
{array,10,0,undefined,10}
39> array:set(2,5,A14).
{array,10,0,undefined,
{undefined,undefined,5,undefined,undefined,undefined,
undefined,undefined,undefined,undefined}}