我最近認真學習Erlang編程的書,我有一個問題。 以下是Erlang的正確方法嗎?這是(爲簡潔起見(沒有退出消息),在基本驗證後刪除日誌記錄)解決ch4環問題的方法。進程在它們傳遞了消息的預定次數後退出;第一個進程等待最後一條消息到達並退出。新手問題 - 應該在編程erlang時使用ifs還是short函數?
除了風格和實質的一般批評,你能告訴我,如果寫這樣的特殊1-2行函數是正確的風格,或者如果應該使用if-s,cases-s等嗎?
start_ring(0, _, _) -> {error, badarg};
start_ring(_, 0, _) -> {error, badarg};
start_ring(M, N, Message) ->
spawn(ring, run_ring, [M, N, Message, 0]).
% last process that connects the ring
run_ring(M, 1, Message, Pid) when is_pid(Pid) ->
loop_ring(M, Message, Pid, false);
% process in the middle
run_ring(M, N, Message, Pid) when is_pid(Pid) ->
loop_ring(M, Message, spawn(ring, run_ring, [M, N-1, Message, Pid]), false);
% first process - special case for one process
run_ring(M, 1, Message, _) ->
loop_ring(M, self() ! Message, self(), true);
% first process
run_ring(M, N, Message, _) ->
NextPid = spawn(ring, run_ring, [M, N-1, Message, self()]),
loop_ring(M, NextPid ! Message, NextPid, true).
loop_ring(0, _, _, _) -> ok;
loop_ring(1, Message, Next, true) -> ok;
loop_ring(M, Message, Next, IsMaster) ->
receive
Message -> loop_ring(M - 1, Next ! Message, Next, IsMaster)
end.