Erlangのlistsモジュールを試してみるの第二回は次のコマンドの結果について試していきます。
1 2 3 4 5 6 7 8 9 10 11 |
|
結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
です。
keydelete/3
Erlang公式ドキュメント
keydelete(Key, N, TupleList1) –> TupleList2
Types
- Key = term()
- N = integer() >= 1 (1..tuple_size(Tuple))
- TupleList1 = TupleList2 = [Tuple]
- Tuple = tuple()
Returns a copy of TupleList1 where the first occurrence of a tuple whose Nth element compares equal to Key is deleted, if there is such a tuple.
Explain
引数に与えられたタプルのリストのコピーを返します。ただし、リスト中のタプルで、タプルのN番目の要素が引数Keyと同じ値のもので最も先頭に近いものは取り除かれます。
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
まず最初の例では、リストの中で一番最初に出てくるキーの位置1
番目の値がjim
であるタプルを削除したリストが返されます。元のリストで9番目のタプルも同様の条件ですが、こちらは削除されません。
次の例ではリストで一致しない条件で実行しています。返されるリストは何も削除されていません。
最後の例ではリストのタプルの要素数より多い番号を指定して削除を実施します。もちろん、返されるリストは何も削除されていません。
keyfind/3
Erlang公式ドキュメント
keyfind(Key, N, TupleList) –> Tuple | false
Types
- Key = term()
- N = integer() >= 1 (1..tuple_size(Tuple))
- TupleList = [Tuple]
- Tuple = tuple()
Searches the list of tuples TupleList for a tuple whose Nth element compares equal to Key. Returns Tuple if such a tuple is found, otherwise false.
Explain
タプルのリストから指定位置の要素についてKey
に一致する最初のタプルを返します。
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
最初の例ではタプルの二番目の値が36
のものを探して、返します。
次の例ではタプルの最初の値がjim
のものを探して返しますが、9番目に現れるものは返されません。
最後の例では一致するものがない条件で検索を行いますが、存在しないためfalse
が返ってきます。
keymap/3
Erlang公式ドキュメント
keymap(Fun, N, TupleList1) –> TupleList2
Types
- Fun = fun((Term1 :: term()) –> Term2 :: term())
- N = integer() >= 1 (1..tuple_size(Tuple))
- TupleList1 = TupleList2 = [Tuple]
- Tuple = tuple()
Returns a list of tuples where, for each tuple in TupleList1, the Nth element Term1 of the tuple has been replaced with the result of calling Fun(Term1).
Explain
タプルに対して指定した位置の要素に、引数で渡した関数を実行した結果が入れられた、新しいタプルのリストが返されます。
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
この例ではタプルの3番目の要素がprogrammerならtrueに変換し、そうでなければfalseに変換した新しいタプルのリストを返します。
keymember/3
Erlang公式ドキュメント
keymember(Key, N, TupleList) –> boolean()
Types
- Key = term()
- N = integer() >= 1 (1..tuple_size(Tuple))
- TupleList = [Tuple]
- Tuple = tuple()
Returns true if there is a tuple in TupleList whose Nth element compares equal to Key, otherwise false.
Explain
指定位置にKey
を含むタプルがリスト中にあればtrue
、なければfalse
が返ってきます。
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
最初の例では、1番目の要素がbob
であるタプルがリスト中に含まれていますので、true
が返されます。
次の例では、3番目の要素がmadscientist
のタプルはリスト中に含まれていないので、false
が返されます。
keymerge/3
Erlang公式ドキュメント
keymerge(N, TupleList1, TupleList2) –> TupleList3
Types
- N = integer() >= 1 (1..tuple_size(Tuple))
- TupleList1 = [T1]
- TupleList2 = [T2]
- TupleList3 = [(T1 | T2)]
- T1 = T2 = Tuple
- Tuple = tuple()
Returns the sorted list formed by merging TupleList1 and TupleList2. The merge is performed on the Nth element of each tuple. Both TupleList1 and TupleList2 must be key-sorted prior to evaluating this function. When two tuples compare equal, the tuple from TupleList1 is picked before the tuple from TupleList2.
Explain
この関数は引数で与えられた二つのタプルリストをソートしてマージした状態で返します。ソートのキーは引数のN
番目の要素になります。引数に与えられるタプルリストは事前にソートされていることが求められます。双方のタプルでキーの値が一致する場合、左側の引数のリストから取られたタプルが右のものに優先されます。
Example
1 2 3 4 5 6 7 8 |
|
最初の例では、事前にソートされたタプルリストが引数として与えられ、マージされたリストが返されます。また、[{d, 1}, {d, 2}]
のようにキーの値が一致するものは左側の引数に与えられたものが優先されています。
次の例では、事前にソートされていないタプルリストが引数として与えられていますが、返されるリストはマージされていない状態で返ってきます。
keyreplace/4
Erlang公式ドキュメント
keyreplace(Key, N, TupleList1, NewTuple) –> TupleList2
Types
- Key = term()
- N = integer() >= 1 (1..tuple_size(Tuple))
- TupleList1 = TupleList2 = [Tuple]
- NewTuple = Tuple
- Tuple = tuple()
Returns a copy of TupleList1 where the first occurrence of a T tuple whose Nth element compares equal to Key is replaced with NewTuple, if there is such a tuple T.
Explain
タプルリストの中で最も最初に現れたN
番目の要素がKey
であるタプルを引数で指定されたタプルに変更したリストを返します。
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
最初の例では最も最初に現れる1番目の要素がb
であるタプルが引数で与えられたタプルと交換されて返されます。最後に現れる同じKey
をもつタプルは変わっていません。
次の例ではKey
に一致するタプルが存在しないため、元のリストと同じ物が返ってきます。
keysearch/3
Erlang公式ドキュメント
keysearch(Key, N, TupleList) –> {value, Tuple} | false
Types
- Key = term()
- N = integer() >= 1 (1..tuple_size(Tuple))
- TupleList = [Tuple]
- Tuple = tuple()
Searches the list of tuples TupleList for a tuple whose Nth element compares equal to Key. Returns {value, Tuple} if such a tuple is found, otherwise false.
This function is retained for backward compatibility. The function lists:keyfind/3 (introduced in R13A) is in most cases more convenient.
Explain
タプルリストの中でN
番目の要素がKey
である最初のタプルを探して、{value, Tuple}
の形式で返します。見つからない場合は、false
を返します。
なお、この関数は下位互換のために残っているものであり、R13Aより導入されたlists:keyfind/3
関数の方が便利です。
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
最初の例では1番目の要素がc
であるタプルを探して{value, {c, 1}}
のように返します。二番目に現れるものは返しません。
次の例では条件に該当するタプルがないためにfalse
が返ってきます。
keysort/2
Erlang公式ドキュメント
keysort(N, TupleList1) –> TupleList2
Types
- N = integer() >= 1 (1..tuple_size(Tuple))
- TupleList1 = TupleList2 = [Tuple]
- Tuple = tuple()
Returns a list containing the sorted elements of the list TupleList1. Sorting is performed on the Nth element of the tuples. The sort is stable.
Explain
引数に渡されたタプルリストをN
番目の要素でソートしたリストを返します。ソートは安定ソートです。
Example
1 2 3 4 5 6 7 8 9 10 11 12 |
|
ソートされた結果が返ってきます。安定ソートのため、重複するキーに対しては元の順番が維持されます。
keystore/4
Erlang公式ドキュメント
keystore(Key, N, TupleList1, NewTuple) –> TupleList2
Types
- Key = term()
- N = integer() >= 1 (1..tuple_size(Tuple))
- TupleList1 = [Tuple]
- TupleList2 = [Tuple, …]
- NewTuple = Tuple
- Tuple = tuple()
Returns a copy of TupleList1 where the first occurrence of a tuple T whose Nth element compares equal to Key is replaced with NewTuple, if there is such a tuple T. If there is no such tuple T a copy of TupleList1 where [NewTuple] has been appended to the end is returned.
Explain
タプルリストの中で一番最初に出てくるN
番目の要素がKey
であるタプルを、引数のタプルと交換したリストを返します。Key
に一致するリストがない場合は、リストの最後に追加されて返されます。
Example
1 2 3 4 5 6 7 8 9 10 11 12 |
|
最初の例では、1番目の要素がb
であるタプルが、引数に与えられた新しいタプルに交換されたリストが返ってきます。
次の例では、該当するタプルが存在しないため、引数に与えられた新しいタプルがリストの最後に追加されて返ってきます。
keytake/3
Erlang公式ドキュメント
keytake(Key, N, TupleList1) –> {value, Tuple, TupleList2} | false
Types
- Key = term()
- N = integer() >= 1 (1..tuple_size(Tuple))
- TupleList1 = TupleList2 = [Tuple]
- Tuple = tuple()
Searches the list of tuples TupleList1 for a tuple whose Nth element compares equal to Key. Returns {value, Tuple, TupleList2} if such a tuple is found, otherwise false. TupleList2 is a copy of TupleList1 where the first occurrence of Tuple has been removed.
Explain
タプルリストの中から初めて現れるN
番目の要素がKey
であるタプルを取り出し、{value, Tuple, TupleList2}
の形式で返します。戻されるタプルリストには条件に一致したタプルは含まれていません。一致するものがない場合は、false
が返されます。
Example
1 2 3 4 5 6 |
|
最初の例では一番最初に現れる1番目の要素がb
のタプルが取り出され、後から現れるものは残ったリストとともに返されています。
次の例では、条件に一致するタプルがないため、false
が返されます。
last/1
Erlang公式ドキュメント
last(List) –> Last
Types
- List = [T, …]
- Last = T
- T = term()
Returns the last element in List.
Explain
リストの最後の要素を返します。
Example
1 2 3 4 5 6 |
|
最初の例ではリストの最後の要素5
が返されます。
次の例では長さ1のリストを引数として渡して、最後の要素=たったひとつの要素である1
が返されます。
最後の例では長さ0のリストを引数として渡します。この場合は例外が発生します。
map/2
Erlang公式ドキュメント
map(Fun, List1) –> List2
Types
- Fun = fun((A) –> B)
- List1 = [A]
- List2 = [B]
- A = B = term()
Takes a function from As to Bs, and a list of As and produces a list of Bs by applying the function to every element in the list. This function is used to obtain the return values. The evaluation order is implementation dependent.
Explain
要素を返還する関数を引数に取ります。そしてリストの要素1つずつに関数を適用した結果が入ったリストが返されます。なお、実行順序は実装に依存しています。
Example
1 2 |
|
引数に偶数かどうか判定する関数を渡します。引数のリストは1から5までの整数ですので、false
とtrue
が繰り返されるリストが返ってきます。
mapfoldl/3
Erlang公式ドキュメント
mapfoldl(Fun, Acc0, List1) –> {List2, Acc1}
Types
- Fun = fun((A, AccIn) –> {B, AccOut})
- Acc0 = Acc1 = AccIn = AccOut = term()
- List1 = [A]
- List2 = [B]
- A = B = term()
mapfoldl combines the operations of map/2 and foldl/3 into one pass.
Explain
mapfoldl/3
関数はmap/2
関数とfoldl/3
関数を一つにまとめたような関数です。
Example
1 2 3 4 5 6 7 |
|
複素数{R, I}
に対して、掛け算をする関数Multiply
を定義し、lists:mapfoldl/3
で初期値{1, 0}
から左から順繰りに掛け算をしていきます。返されたタプルの左要素には掛け算の経過が、タプルの右側の要素には最終的な掛け算の結果が返っています。
mapfoldr/3
Erlang公式ドキュメント
mapfoldr(Fun, Acc0, List1) –> {List2, Acc1}
Types
- Fun = fun((A, AccIn) –> {B, AccOut})
- Acc0 = Acc1 = AccIn = AccOut = term()
- List1 = [A]
- List2 = [B]
- A = B = term()
mapfoldr combines the operations of map/2 and foldr/3 into one pass.
Explain
mapfoldr
関数はmap/2
関数とfoldr/3
関数を組み合わせた関数です。
Example
1 2 3 4 5 6 7 |
|
先ほどと同じく複素数の計算をしています。返されたタプルの左側の順序が先ほどのmapfoldl/3
関数と異なっていることがわかると思います。
max/1
Erlang公式ドキュメント
max(List) –> Max
Types
- List = [T, …]
- Max = T
- T = term()
Returns the first element of List that compares greater than or equal to all other elements of List.
Explain
他のすべての要素より大きい最初の要素を返します。
Example
1 2 |
|
リストの中の最大値である4
が返されます。
member/2
Erlang公式ドキュメント
member(Elem, List) –> boolean()
Types
- Elem = T
- List = [T]
- T = term()
Returns true if Elem matches some element of List, otherwise false.
Explain
指定した要素と一致する要素があればtrue
を、なければfalse
を返します。
Example
1 2 3 4 |
|
最初の例では指定した要素{a,1}
に一致する要素がリストにあるためtrue
が返ってきます。
次の例では指定した要素{a,1}
に一致する要素がリストにないためfalse
が返ってきます。
次回
次回は次の式の結果をやっていきます。
1 2 3 4 5 6 7 8 9 10 11 |
|