【发布时间】:2019-07-29 05:11:06
【问题描述】:
我正在研究一种用于执行累加器并行化版本的 Erlang 方法。该方法是采用关联和交换运算符以及值列表,然后通过将运算符应用于列表中的值来返回答案。下面两个例子展示了程序的命令行 I/O:
示例 1
CL Input: sum(fun (A,B) -> A++B end , ["U", "V", "W"]).
CL Output: "UVW"
示例 2
CL Input: sum(fun(A,B) -> A+B end, [2,6,7,10,12]
CL Output: 37
这是我到目前为止的代码。我的问题是,我将如何更改此方法以适应上述示例,并同时产生正确的结果?
reduceFunc(Func, [Acc]) -> Acc;
reduceFunc(Func, List) ->
{ L, R } = lists:split(trunc(length(List)/2), List),
Pids = self(),
io:format("Distribute processes~n"),
Pl = spawn(fun() -> reduceFunc(Pids, L) end),
Pr = spawn(fun() -> reduceFunc(Pids, R) end),
Func(Pl, Pr).
代码在计算运算符时返回算术表达式错误(例如,+/2),然后给出每个未应用数值和运算符的 PID,例如这样...
Error in process <0.100.0> with exit value:
{{badfun,<0.95.0>},
我一直在尝试以与合并排序或其他分而治之算法类似的方式来处理此问题,但我不知道从这一点开始应该在哪里修改代码。
【问题讨论】:
标签: parallel-processing erlang pid