我一直在研究如何解决执行分布式地址间隔的Erlang程序。我正在尝试创建一个方法,该方法采用关联和可交换运算符以及值列表,然后通过将运算符应用于列表中的值来返回答案。
以下两个示例表示输入/输出应该是什么样子。
示例1
Input: sum(fun(A,B) -> A+B end, [2,6,7,10,12]
Output: 37
示例2
Input: sum(fun (A,B) -> A++B end , ["C", "D", "E"]).
Output: "CDE"
这是我到目前为止的代码,它只是一个在列表中添加元素的函数。如何更改方法以适应上述示例,以及生成正确的结果?现在,代码只返回总和。
-module(sum).
-export([sum/1]).
sum(L) ->
sum(L, 0).
sum([H|T], Acc) ->
sum(T, H + Acc);
sum([], Acc) ->
Acc.
我想在尝试并行版本之前连续尝试这个。请知道在发布之前,我试图在其他地方寻找类似的编码示例,以帮助回答我的问题,但我找不到太多,这就是我发布这个的原因。
答案 0 :(得分:2)
这个怎么样:
-module(my).
-compile(export_all).
sum(Func, Data, Acc) ->
lists:foldr(Func, Acc, Data).
在shell中:
13> c(my).
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}
14> my:sum(fun(X, Acc) -> X+Acc end, [2,6,7,10,12], 0).
37
15> my:sum(fun(X, Acc) -> X++Acc end, ["C", "D", "E"], []).
"CDE"
累加器(Acc)的起始值需要根据操作员的不同而不同。