Erlang:解析和汇总列表

时间:2018-04-17 00:04:03

标签: erlang

我一直在研究如何解决执行分布式地址间隔的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.

我想在尝试并行版本之前连续尝试这个。请知道在发布之前,我试图在其他地方寻找类似的编码示例,以帮助回答我的问题,但我找不到太多,这就是我发布这个的原因。

1 个答案:

答案 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)的起始值需要根据操作员的不同而不同。