【问题标题】:How to iterate through all elements in a list with Erlang如何使用 Erlang 遍历列表中的所有元素
【发布时间】:2018-04-19 03:03:04
【问题描述】:

我是 Erlang 的新手。我要做的就是获取一个列表,遍历每个元素,以便我可以将它们发送到一个函数。在任何地方都找不到明确的例子。

我想做的例子:

Mylist = [a,b,c,d,e,f,g]

for (i in Mylist) {
  otherFunction(Mylist[i]);
}

【问题讨论】:

    标签: loops for-loop erlang


    【解决方案1】:

    希望有所帮助:)

    func([]) -> ok;
    func([H|T]) ->
        otherFunction(H),
        func(T).
    

    或者您可以使用列表推导:

    [otherFunction(H) || H <- L].
    

    【讨论】:

    • 谢谢!我还想出:lists:foreach(fun(X) -> otherFuntion(X) end, MyList) 供其他阅读此文并处于相同情况的人使用。
    • lists:foreach 不是很地道(命令式而不是函数式)。它通常用于创建副作用,例如为源列表中的每个元素生成一个进程。
    • func([]) 的第二个定义给了我以下编译错误:function func/1 already defined。我该如何解决?谢谢
    • 是因为应该是func([]) -&gt; ok; func([H|T]) -&gt; otherFunction(H), func(T). 保重;在 func/1 的子句版本的末尾,但不是同一函数的所有版本的末尾
    【解决方案2】:

    您可以使用lists:foreach

    L = [a,b,c,d,e,f,g],
    Function = fun(Elem) -> atom_to_binary(Elem, utf8) end,
    lists:foreach(Function, L).
    

    或者如果您需要从函数中接收一些结果,您可以使用lists:foldllists:foldr

    L = [a,b,c,d,e,f,g],
    F = fun(Elem, Acc) -> [atom_to_binary(Elem, utf8) | Acc] end,
    lists:foldl(F, [], L).
    

    响应将是

    [<<"g">>,<<"f">>,<<"e">>,<<"d">>,<<"c">>,<<"b">>,<<"a">>]
    

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 2012-06-13
      • 1970-01-01
      • 2019-11-23
      • 2019-04-15
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多