私はプログラミングや新しいerlang(2週間の初心者!私はちょっと編集したので、少なくともそれはコンパイルされ実行されます。しかし、私はまだ、結果を「結合プロセス」に送信して、すべての個別の結果に参加するという概念を理解することはできません。Erlang newbie - 並行性とメッセージの受け渡し
チャンクをカウントするために受け取った「チャンク」を分割して送信します。すべてのプロセスを個別の結果に結び付ける方法を知りません。私は以下のコンセプトを理解していますが、それがどのようにインパメントされているのか分かりません。私は、あなたが行くの出力を同期させる必要があり
など、-module (ccharcount1d).
-compile(export_all).
load(F)->
{ok, Bin} = file:read_file(F),
List=binary_to_list(Bin),
Ls=string:to_lower(List),
Length=round(length(List)/20),
Collect_Results = spawn(ccharcount1d, collect_results, []),
Sl=split(Ls,Length),
io:fwrite("Loaded, Split, and sent to multiple processes~n").
%%splits txt file into "chunks" and sends those "chunks" to be processed
split([],_)->[];
split(List,Length)->
S1=string:substr(List,1,Length),
case length(List) > Length of
true->S2=string:substr(List,Length+1,length(List)),
Process_Split = spawn(ccharcount1d,receive_splits,[]),
Process_Split ! {self(), S1};
false->S2=[],
Process_Split = spawn(ccharcount1d,receive_splits,[]),
Process_Split ! {self(), S1}
end,
[S1]++split(S2,Length).
%%recieves the split "chunks" and counts the results
receive_splits()->
receive
{From, S1} ->
Result=go(S1)
%Collect_Results ! Result
end.
collect_results()->
receive
{Process_Split, Result} ->
Result=join([],Result)
end.
join([],[])->[];
join([],R)->R;
join([H1 |T1],[H2|T2])->
{C,N}=H1,
{C1,N1}=H2,
[{C1,N+N1}]++join(T1,T2).
count(Ch, [],N)->N;
count(Ch, [H|T],N) ->
case Ch==H of
true-> count(Ch,T,N+1);
false -> count(Ch,T,N)
end.
go(L)->
Alph=[$a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n,$o,$p,$q,$r,$s,$t,$u,$v,$w,$x,$y,$z],
rgo(Alph,L,[]).
rgo([H|T],L,Result)->
N=count(H,L,0),
Result2=Result++[{[H],N}],
rgo(T,L,Result2);
rgo([],L,Result)-> Result.
と:はるかに簡潔に、このような
:
となおさら、このようなそれはあなたがこれを書くことができることを意味します真新しいエルラン(2週間の初心者!)*私の意見ではひどいアイデア。 Pythonを学んでください。楽しんで1年を過ごし、そこからどこに行きたいかを決めます。 – 7stud