両方のリストの合計が同じになるように、特定のリストを 2 つのリストに分割する方法を知りたいです。並行性を使用してそれを行いたいです。私はこれをアーランでやっています。
だから、私はこのようなことをやっています: リストを読んで、その合計が偶数なら続行し、そうでなければ失敗します。リストの最初の要素を取り、それが合計の半分より大きいかどうかを確認し、そうでない場合は、この要素を新しいリストに追加します。次に、リストの 2 番目の要素を取得し、この要素と新しいリストの要素の合計を確認して、同じ操作を行います。などなど..新しいリストの合計が最初のリストの合計の半分に等しい場合、別の関数を呼び出して残りの要素を送信します。
-module(piles_hw).
-compile(export_all).
start([]) -> 0;
start(List) ->
Total = lists:foldl(fun(X, Sum)-> X+Sum end,0,List),
if (Total rem 2) == 0 ->
Total/2,
copy_to_list_one([],List,start(List));
true ->
func_fail()
end.
copy_to_list_one(L1,[H|T],X)->
Y =lists:sum(L1)+H,
if Y<X ->
copy_to_list_one(lists:append(L1,[H]),lists:delete(H,[H|T]),X);
Y==X ->
take(lists:append(L1,[H]));
Y>X ->
copy_to_list_one(L1,lists:delete(H,[H|T]),X)
end;
copy_to_list_one(L1,[],X)->
copy_func_two([1,2,3,4,19,20,28,14,11],X).
copy_func_two([H|T],X)->
copy_to_list_one([],lists:append(T,[H]),X).
take(L3)->
io:format("~w",[L3]).
func_fail() ->
io:format("~n fail ~n").
しかし、このように無限ループに陥ることがあります。誰か助けてくれませんか?