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 |
|
merge/1
Erlang Document
merge(ListOfLists) –> List1
Types
- ListOfLists = [List]
- List = List1 = [T]
- T = term()
Returns the sorted list formed by merging all the sub-lists of ListOfLists. All sub-lists must be sorted prior to evaluating this function. When two elements compare equal, the element from the sub-list with the lowest position in ListOfLists is picked before the other element.
Explain
リスト内のリストをソートしてマージしたリストを返します。なお、リスト内のリストは事前にソートされている必要があります。
Example
1 2 3 4 5 |
|
複数のリストがマージされて新しいリストが返されます。
merge/2
Erlang Document
merge(List1, List2) –> List3
Types
- List1 = [X]
- List2 = [Y]
- List3 = [(X | Y)]
- X = Y = term()
Returns the sorted list formed by merging List1 and List2. Both List1 and List2 must be sorted prior to evaluating this function. When two elements compare equal, the element from List1 is picked before the element from List2.
Explain
二つのリストをソートしてマージした新しいリストを返します。二つのリストは事前にソートされている必要があります。
Example
1 2 |
|
二つのリストがマージされた新しいリストが返されます。
merge/3
Erlang Document
merge(Fun, List1, List2) –> List3
Types
- Fun = fun((A, B) –> boolean())
- List1 = [A]
- List2 = [B]
- List3 = [(A | B)]
- A = B = term()
Returns the sorted list formed by merging List1 and List2. Both List1 and List2 must be sorted according to the ordering function
Fun
prior to evaluating this function.Fun(A, B)
should returntrue
ifA
compares less than or equal toB
in the ordering,false
otherwise. When two elements compare equal, the element from List1 is picked before the element from List2.
Explain
List1
とList2
をソートしてマージした新しいリストを返します。引数のリストは事前にソートされている必要があります。Fun(A, B)
はソートオーダーに関してA
が先に来るべきである場合はtrue
を、そうでない場合はfalse
を返します。同じ値の要素がある場合は、List1
のものがList2
のものに優先されます。
Example
1 2 3 4 5 6 |
|
最初の例では、降順にソートする関数で評価してリストをマージして新しいリストを返します。
後者の例では、昇順ソートです。同一の値の場合にList1
から要素が取得されています。
merge3/3
Erlang Document
merge3(List1, List2, List3) –> List4
Types
- List1 = [X]
- List2 = [Y]
- List3 = [Z]
- List4 = [(X | Y | Z)]
- X = Y = Z = term()
Returns the sorted list formed by merging List1, List2 and List3. All of List1, List2 and List3 must be sorted prior to evaluating this function. When two elements compare equal, the element from List1, if there is such an element, is picked before the other element, otherwise the element from List2 is picked before the element from List3.
Explain
三つのリストをソートしてマージした新しいリストを返します。引数のリストは事前にソートされている必要があります。もし同じ値の要素があった場合はList1
、List2
、List3
の順番で優先されます。
Example
1 2 3 4 5 |
|
min/1
Erlang Document
min(List) –> Min
Types
- List = [T, …]
- Min = T
- T = term()
Returns the first element of List that compares less than or equal to all other elements of List.
Explain
リスト中、最初に現れた最も小さい要素を返します。
Example
1 2 3 4 5 6 7 8 9 10 |
|
最初の例では引数のリストの最小整数1が返されます。
次の例では引数のリストの最小のatomb
が返されます。
三番目と四番目の例では整数と浮動小数点数の0を比較して最初に現れた要素が返されます。
最後の例では整数と浮動小数点数とatomを比較しています。最初に現れた最小の要素(整数)が返されます。
module_info/0
Erlang Document
module_info
The module_info/0 function in each module returns a list of {Key,Value} tuples with information about the module. Currently, the list contain tuples with the following Keys: attributes, compile, exports, and imports. The order and number of tuples may change without prior notice.
warning
The {imports,Value} tuple may be removed in a future release because Value is always an empty list. Do not write code that depends on it being present.
Explain
これはlistsモジュールでなく、すべてのモジュールに共通する関数ですな。
モジュールに関する情報を{Key, Value}
のタプルリストで返します。現在のところ、
- attributes
- compile
- exports
- imports
といったキーです。なお、{imports, Value}
タプルは常に空のリストしか返さないため、今後なくなる予定です。これに基づいたコードを記述しないで下さい。
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 |
|
たくさん出てきた…
module_info/1
Erlang Document
module_info
The call module_info(Key), where key is an atom, returns a single piece of information about the module.
Explain
module_info
関数からKey
を指定して取り出します。
Example
1 2 |
|
lists:module_info/0
の結果の一部が返ってきます。
nth/2
Erlang Document
nth(N, List) –> Elem
Types
- N = integer() >= 1
- List = [T, …]
- Elem = T
- T = term()
Returns the Nth element of List.
Explain
N
番目の要素を返します。
Example
1 2 |
|
3番目の要素c
が返されます。
nthtail/2
Erlang Document
nthtail(N, List) –> Tail
Types
- N = integer() >= 0
- List = [T, …]
- Elem = T
- T = term()
Returns the Nth tail of List, that is, the sublist of List starting at N+1 and continuing up to the end of the list.
Explain
N+1
番から後ろの要素で作られるサブリストを返します。
Example
1 2 |
|
4番目から後ろの要素で構成されるリストが返されます。
partition/2
Erlang Document
partition(Pred, List) –> {Satisfying, NotSatisfying}
Types
- Pred = fun((Elem :: T) –> boolean())
- List = Satisfying = NotSatisfying = [T]
- T = term()
Partitions List into two lists, where the first list contains all elements for which Pred(Elem) returns true, and the second list contains all elements for which Pred(Elem) returns false.
Explain
条件と分割対象リストを引数に取り、二つの新しいリストに分割します。最初のリストには条件を満たすものを、次のリストには条件を満たさないものを返します。
Example
1 2 |
|
偶数かどうか判定する条件とリストを与えています。 先頭のリストには条件を満たすもの(偶数)のリスト、後ろ側のリストには条件を満たさないもの(奇数)のリストが返されます。
prefix/2
Erlang Document
prefix(List1, List2) –> boolean()
Types
- List1 = List2 = [T]
- T = term()
Returns true if List1 is a prefix of List2, otherwise false.
Explain
List1
がList2
の先頭部分である場合にtrue
を、異なる場合にはfalse
を返します。
Example
1 2 3 4 5 6 |
|
最初の例では、第一引数が第二引数の先頭部分と一致するのでtrue
が返されます。
次の例では、第一引数が第二引数の先頭部分と異なるのでfalse
が返されます。
最後の例では"co"
は"coexistence"
の最初の文字列部分と同じなので、true
が返されます。
reverse/1
Erlang Document
reverse(List1) –> List2
Types
- List1 = List2 = [T]
- T = term()
Returns a list with the elements in List1 in reverse order.
Explain
リストを逆順にして返します。
Example
1 2 |
|
リストの順番が逆になって返されています。
reverse/2
Erlang Document
reverse(List1, Tail) –> List2
Types
- List1 = [T]
- Tail = term()
- List2 = [T]
- T = term()
Returns a list with the elements in List1 in reverse order, with the tail Tail appended.
Explain
リストを逆順にした上で、第二引数を追加した新しいリストを返します。
Example
1 2 3 4 5 6 |
|
最初の例、および二番目の例では最初のリストが逆順になされた上で、次のリストが連結された新しいリストが返ってきます。
最後の例では、結果がリストでなくなります。
公式ドキュメントが間違っているっぽいですね…
rkeymerge/3
Erlang Document
なかった\(^o^)/
Example
1 2 3 4 5 6 7 8 9 10 11 12 |
|
lists:keymerge/3
のreverse版のようです。
- 引数のリストは逆順にソートされている必要があります。
- 同一のキーを持つ場合、第二引数のリストの要素が優先されます。
最初の例では、タプルの2番目の値をキーに逆順ソートされたリストが返されます。
次の例では、逆順にソートされていないため、マージがうまくなされていません。
最後の例では、同じキーがある場合の挙動を確認しています。
同じキー値をもつ要素(ここでは、{a,2}
と{b,2}
)がありますが、
{b, 2}
の方が優先されているのがわかります。
rmerge/2
Erlang Document
なかった\(^o^)/
Example
1 2 3 4 |
|
merge/2
のリバースバージョン。
最初の例では逆順ソートされたリストを引数として渡して、
逆順でマージされた新しいリストが返されます。
次の例では事前に逆順マージされていないため、
求める結果(逆順にマージされたリスト)が返ってきません。
rmerge/3
Erlang Document
なかった\(^o^)/
Example
1 2 3 4 5 6 7 8 |
|
merge/3
関数のリバースバージョン。
引数は先頭から
- Fun = fun((A, B) –> boolean())
- List1 = [T]
- List2 = [T]
です。
なお、
- Funには結果として先にくるものに対してtrueが返すような関数を渡します。
- List1、List2ともにFunにて事前にソートされている必要があります。
- T = term()
となっています。
また、同値なものがあった場合は、Funの実装に従います。