Erlang,返回列表长度的函数?

时间:2017-02-06 08:30:16

标签: erlang

我试图实现一个功能

llen(ListOfLists)

返回一个列表,其中包含ListOfLists中列表的长度。函数应该使用列表:map / 2。

示例:

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

我知道如何计算一个列表的长度:

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

但我不知道如何使用乐趣和列表为多个列表执行此操作。

2 个答案:

答案 0 :(得分:5)

lists:map/2是一个高阶函数,它为列表的每个元素应用一个函数。 erlang:length/1是一个返回列表长度的函数。

使用erlang:length/1

在列表的每个元素上应用lists:map/2
lists:map(fun erlang:length/1, [[1, 2, 3], [], [4, 5]])

答案 1 :(得分:2)

当你进入列表理解时:

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

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

list comprehension 就像其他语言中的for循环一样,这个如下:

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

外部[ ]用于将所有结果收集到列表中。