0

リスト A のすべての値からプロセスのリスト B への同時パスを実装するにはどうすればよいですか? リスト A と B はどちらも同じサイズです。A = [1,2,3] および B = [<0.42.0>,<0.43.0>,<0.44.0>] としましょう。プロセス <0.42.0> などに値 1 を渡して並列実行したい。

これが私がこれまでに思いついたものです:

pass_values([P|ValueListA], [H|ProcessListB]) ->
    H ! {foo, P},
    pass_values(ValueListA, ProcessListB).
4

1 に答える 1

1

あなたが探しているのは、scatter要素の配列を取り、要素をプロセスの配列に配布するユーティリティです。

-module(lab).

-compile(export_all).

go() ->
    ProcessList =
        lists:map(fun(_) ->
                          spawn(?MODULE, echo, [])
                  end,
                  lists:seq(1, 6)),
    DataList = ["E", "r", "l", "a", "n", "g"],
    scatter(DataList, ProcessList).

scatter(DataList, ProcessList) ->
    lists:foreach(fun({Data, Process}) ->
                          Process ! Data
                  end,
                  lists:zip(DataList, ProcessList)).

echo() ->
    receive
        Msg ->
            io:format("~p echos ~p~n", [self(), Msg]),
            echo()
    end.

試してみる:

1> c(lab).
{ok,lab}
2> lab:go().
<0.40.0> echos "E"
<0.41.0> echos "r"
<0.42.0> echos "l"
<0.43.0> echos "a"
<0.44.0> echos "n"
<0.45.0> echos "g"
ok
于 2013-10-01T03:31:42.683 に答える