2017-02-06 3 views
3

私はListOfListsでリストの長さを含むリストを返す関数Erlang、リストの長さを返す関数?

llen(ListOfLists) 

を実装しようとしています。関数はリストを使用する必要があります:map/2。

例:

1> funs:llen([[1, 2, 3], [], [4, 5]]). 
[3, 0, 2] 

私は1つのリストのための長さを計算する方法を知っている:

list([]) -> 0; 
list([_|T]) -> 1+list(T). 

が、私は低速運行やリストを使用して複数のリストのためにこれを行う方法を知りません。

+5

'list:map(fun erlang:length/1、[[1、2、3]、[]、[4,5]])'? – Dogbert

+0

@Dogbert yes、ty a lot :) – mrjoe

答えて

5

lists:map/2は、リストの各要素に関数を適用する上位関数です。 erlang:length/1は、リストの長さを返す関数です。

lists:map/2を使用して、リストの各要素に対してerlang:length/1を適用します。

lists:map(fun erlang:length/1, [[1, 2, 3], [], [4, 5]]) 
3

そして、あなたはリスト内包に到達したとき:

53> L = [[1, 2, 3], [], [4, 5]]. 
[[1,2,3],[],[4,5]] 

54> [length(X) || X <- L]. 
[3,0,2] 

リストの内包は、forループのようなものですこれは次のようになります。

length(X) for X in L 
length(X) || X <- L 

外側の[ ]は、すべての結果をリストにまとめます。

+0

両方の解決策は良いですが、リストの解説の説明には適しています。それは便利です。 – mrjoe

関連する問題