【问题标题】:Erlang, Function which return the lenghts of the lists?Erlang,返回列表长度的函数?
【发布时间】:2017-06-23 03:08:55
【问题描述】:

我正在尝试实现一个功能

llen(ListOfLists)

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

例子:

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

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

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

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

【问题讨论】:

  • lists:map(fun erlang:length/1, [[1, 2, 3], [], [4, 5]])?
  • @Dogbert 是的,很多 :)

标签: erlang


【解决方案1】:

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

使用lists:map/2 对列表的每个元素应用erlang:length/1

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

【讨论】:

    【解决方案2】:

    当你进入列表理解时:

    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
    

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

    【讨论】:

    • 两种解决方案都很好,但对于列表理解解释来说是 ty。很有用。
    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 2018-01-20
    • 1970-01-01
    • 2019-04-08
    • 2019-07-12
    • 2010-12-24
    • 2012-11-23
    • 2018-12-06
    相关资源
    最近更新 更多