【发布时间】:2018-04-19 03:03:04
【问题描述】:
我是 Erlang 的新手。我要做的就是获取一个列表,遍历每个元素,以便我可以将它们发送到一个函数。在任何地方都找不到明确的例子。
我想做的例子:
Mylist = [a,b,c,d,e,f,g]
for (i in Mylist) {
otherFunction(Mylist[i]);
}
【问题讨论】:
我是 Erlang 的新手。我要做的就是获取一个列表,遍历每个元素,以便我可以将它们发送到一个函数。在任何地方都找不到明确的例子。
我想做的例子:
Mylist = [a,b,c,d,e,f,g]
for (i in Mylist) {
otherFunction(Mylist[i]);
}
【问题讨论】:
希望有所帮助:)
func([]) -> ok;
func([H|T]) ->
otherFunction(H),
func(T).
或者您可以使用列表推导:
[otherFunction(H) || H <- L].
【讨论】:
lists:foreach 不是很地道(命令式而不是函数式)。它通常用于创建副作用,例如为源列表中的每个元素生成一个进程。
func([]) 的第二个定义给了我以下编译错误:function func/1 already defined。我该如何解决?谢谢
func([]) -> ok; func([H|T]) -> otherFunction(H), func(T). 保重;在 func/1 的子句版本的末尾,但不是同一函数的所有版本的末尾
您可以使用lists:foreach
L = [a,b,c,d,e,f,g],
Function = fun(Elem) -> atom_to_binary(Elem, utf8) end,
lists:foreach(Function, L).
或者如果您需要从函数中接收一些结果,您可以使用lists:foldl 或lists: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">>]
【讨论】: