【发布时间】:2012-11-07 20:09:31
【问题描述】:
这对于有 Erlang 经验的人来说可能很容易,但我没有。 我试图制作一个斐波那契进程树。然后它应该接受一条消息,我可以在其中计算传递给它的那个节点下所有节点的总和。
create_fibtree(N) when N > 1 ->
Child1 = spawn(fun() -> create_fibtree(N-1) end),
Child2 = spawn(fun() -> create_fibtree(N-2) end),
receive
Sum ->
Child1 ! sum + 1,
Child2 ! sum + 1,
io:format ("sum is ~p.~n", [Sum])
end;
create_fibtree(N) when N =< 1 ->
ok.
当我运行这个时:
c(fib_tree2).
{ok,fib_tree2}
2> fib_tree2:create_fibtree(10).
Erlang 控制台挂起。不知道为什么,但它与接收子句有关吗?
是的,这是作业,我的老师这周不在,这就是我在互联网上寻找替身的原因。
【问题讨论】:
-
嗯,我通常会在电子邮件中回复,通常在收到电子邮件后不到一个小时...!埃米尔的答案是正确的。但是,我不确定 stackoverflow 对家庭作业问题的政策。
-
aronisstav, How to ask and answer homework questions? 只要问题是主题,我们就应该尝试回答它,imo。请注意,我在回答中试图避免任何会造成作弊情况的事情。
标签: concurrency erlang message-passing erlang-shell