l'essentiel est invisible pour les yeux

Friday, May 04, 2007

[Erlang] listsモジュールの関数一覧 1



Programming Erlang(PDF)を購入した。

形式コメントからドキュメントを生成するErlang Docのような物が存在するかも知れないが、知らないのでリストに関する操作を提供するモジュール/usr/lib/erlang/lib/stdlib-1.14.2/src/lists.erlからリスト関数を一つずつ見ていきここにまとめることにした。Erlangの規約にのっとり関数名/Arity(関数の引数の数)で示す。

追記
Programming ErlangのAppendix A "Documenting Your Program"を参照。


また、Erlangではモジュールは自作のモジュールも含めてコンパイルされる。標準ライブラリとして提供されているモジュールは/usr/lib/erlang/lib/stdlib-1.14.2/ebin/いかに(環境によって異なる).beam(Bogdan's Erlang Absctract Machine)拡張子で保存されている。

Tips
Erlangインタプリタ上で一度束縛した変数の束縛を解除するにはf().関数を使用する。

listsモジュールの関数一覧

append/2
二つのリストを連結する。

13> lists:append([1,2], [2,3]).
[1,2,2,3]


subtract/2
集合Aから集合Bを引いた差集合を返す。

14> lists:subtract([1,2], [2,3]).
[1]


reverse/1
リストを逆順にする。

15> lists:reverse([1,2,3,4]).
[4,3,2,1]


nth/2
リストの先頭からN番目の要素を取り出す。

6> lists:nth(3,["UIE", "Japan", "Inc"]).
"Inc"


nthtail/2
リストの先頭N要素を取り除いた残りのリストを返す。

20> lists:nthtail(1, ["UIE", "Japan", "Inc"]).
["Japan","Inc"]


prefix/2
リストAがリストBの先頭要素と等しければtrue, 異なればfalseを返す。

35> lists:prefix(["UIE"], ["UIE", "Japan", "Inc"]).
true
36> lists:prefix(["UIE", "Japan"], ["UIE", "Japan", "Inc"]).
true


suffix/2
リストAの末尾要素がリストBの末尾要素と等しければtrue, 異なればfalseを返す。

38> lists:suffix(["Inc"], ["UIE", "Japan", "Inc"]).
true


last/2
配列の最後の要素を返す。

44> lists:last(["UIE", "Japan", "Inc"]).
"Inc"


seq/2 :: seq(MIN, MAX)
整数値MINからMAXまでの順序数を返す。

45> lists:seq(10,20).
[10,11,12,13,14,15,16,17,18,19,20]


seq/3 :: seq(MIN, MAX, Incr)
整数値MINからMAXまでの順序数を返すが増分値を整数Incrの値とする。

48> lists:seq(10,20,3).
[10,13,16,19]


sum/1
リストの合計を返す。

51> lists:sum([10,20,30,40]).
100


duplicate/2 :: duplicate(N,X) XをN個持つリストを返す。

55> lists:duplicate(10, 2).
[2,2,2,2,2,2,2,2,2,2]


min/1
リスト中の最小値を返す。

56> lists:min([1,2,3,4,5]).
1


max/1
リスト中の最大値を返す。

57> lists:min([1,2,3,4,5]).
5


list/2
リスト中の部分リストを返す。(開始要素は先頭要素)

60> lists:sublist([1,2,3,4,5], 3).
[1,2,3]


list/3 :: sublist(List, Start, Length)
リスト中の部分リスト(Start..Start+Length)を抽出する。

58> lists:sublist([1,2,3,4,5], 2, 3).
[2,3,4]


delete/2 :: delete(Item, List) -> List
リスト中からItemを削除する。

62> lists:delete(3, [1,2,3,4,5]).
[1,2,4,5]


zip/2
引数に渡した各リスト(要素数は2つ)の要素からなるタプルのリストを返す。
 
63> lists:zip([1,3,5,7], [2,4,6,8]).
[{1,2},{3,4},{5,6},{7,8}]


unzip/2
zip/2と可逆の操作を行い結果をタプルで返す。

64> lists:unzip([{1,2},{3,4},{5,6},{7,8}]).
{[1,3,5,7],[2,4,6,8]}


zip/3
引数中のリストからタプルの組を生成してリストで返す。

69> lists:zip3([1,4,7], [2,5,8], [3,6,9]).
[{1,2,3},{4,5,6},{7,8,9}]


unzip/3
zip/3と可逆の操作を行い結果をタプルで返す。

70> lists:unzip3([{1,2,3},{4,5,6},{7,8,9}]).
{[1,4,7],[2,5,8],[3,6,9]}


zipwith/3 :: zipwith(F, X, Y)
XとYの要素を順に抽出しF(X1,Y1), F(X2,Y2)...なるリストを返す。

76> Mod = fun(X, Y) -> X * Y end.
#Fun
77> lists:zip(Mod, [1,3,5,7], [2,4,6,8]).
[2,12,30,56]


zipwith3/3 :: zipwith(F, X, Y, Z)
X, Y, Zの要素を順に抽出しF(X1,Y1, Z1), F(X2,Y2, Z2)...なるリストを返す。

82> Volume = fun(X, Y,Z) -> X * Y * Z end.
#Fun
83> lists:zipwith3(Volume, [1,4,7], [2,5,8], [3,6,9]).
[6,120,504]


まだまだあるが、長くなったのでとりあえずココまで。