习作,启动一圈进程,累加值

某人在QQ上问的问题:
进程0 发送一个整数给进程1;进程1 将该数加1,传递给进程2;进程2 再将该数加1,再传递给进程3;依次类推,最后,进程P-1 将该数传递给进程0,由进程0 负责广播该数给所有进程,并打印输出 。

Erlang的实现:

-module(test_p).
-export([start/1, send/1]).

for_spawn(0, Pid) ->
    spawn(fun()->loop(Pid) end);
for_spawn(N, Pid) ->
    Pnext = spawn(fun()->loop(Pid) end),
    for_spawn(N-1, Pnext).
    
start(P)->
    P0 = spawn(fun() -> loop(self()) end),
	register(p0,P0), 
	P1 = for_spawn(P, p0),
    p0 ! {P1}.
    
send(N) -> p0 ! {send, N}.       

loop(Pid_next)->
    receive
        {number, N} ->
            P0 = get(the_p0),
            case self() of
                P0 ->
            		io:format('Result:~p~n', [N]);
                _ ->
					Pid_next ! {number, N + 1}
            end;                    
        {send, N} ->
            Pn = get(pid_next),
            Pn ! {number, N};
        {Pid} ->
            put(the_p0, self()),
            put(pid_next, Pid)
    end,
	loop(Pid_next).