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]
まだまだあるが、長くなったのでとりあえずココまで。