1

Erlangは同じリストに要素を追加しますか? アーランで可能ですか?そうでない場合は、誰かが別の解決策でこれを達成するのを手伝ってください。

私がしなければならない実際の要件は次のとおりです。

複数のリスト ID があるため、リスト ID に基づいて、ステータスが「B」、「U」(バウンスおよび購読解除済み) ではないすべての購読者の電子メール ID を 1 つのリストに取得し、その後、重複する電子メール ID を削除する必要があります。その listSubscribers から、適切な ListSubscriber を取得したら、それをループして、一意のすべての購読者に電子メールを送信します。ここで問題が発生するのは、最初にサブスクライバーを取得するときにすべてのサブスクライバーを取得するためにループし、ループが 2 番目のサブスクライバーに移動してサブスクライバーを取得すると、同じリストに追加され、エラー bcoz リストが既にバインドされていることをスローするときです。

私がやっていることのサンプルコード...

% I have multiple list it can be any number, So by loop through each list id fetching subscribers.

lists:foreach( fun (ListId) -> 

ListSubscribers = emailmarketing:get_list_subscribers(ListId), %% Here I am fetching All email subscriber Ids...

io:fwrite("Total Subscriber from this list -> ~p ~n", [ListSubscribers])

end, ListIds),

UniqueSubscriberList = lists:usort(ListSubscribers),

%% Now I'll loop here and send each subscriber campaign email.

ありがとう!

4

3 に答える 3

3

Erlang は関数型プログラミング言語であることに注意してください。C や PHP などの命令型言語とは大きく異なります。Erlang のコーディングには、単一代入、再帰、高階関数、場合によってはリスト内包表記など、関数型プログラミングの基本的な理解が必要です。

リスト内包表記は、シナリオで非常に役立ちます。あなたがやろうとしていることの多くは、次のように書くことができると思います:

ListSubscribers = lists:flatten([emailmarketing:get_list_subscribers(ListId) || ListId <- ListIds])
于 2012-04-16T14:52:24.260 に答える
2

Erlang は単一代入関数型言語です。あなたがしなければならないのは、最初のリストの 1 つの var に割り当て、次の var に 2 番目のリストを連結することだけです。したがって、「変更」(追加、削除、更新など)している間は常に新しいリストを作成します。

ListOne = getSubs1(),
ListTwo = getSubs2(),
ListThree = lists:append(ListOne, ListTwo),

次に、フィルターを適用して不要なものを削除すると、別のリストが生成されます。

ListFour = lists:filter(fun(X) -> ... end, ListThree).

など。何かを変更するたびに、常に新しいリストを作成します。前のものを変更することはありません。

あなたの場合ListSubscribers、 forall fun の範囲でのみ表示され、マップのようなものに変更する必要があり、mapまたはfilterこのような結果リストが生成されます。

ListOfLists = [ 1, 2, 3, 4, 5, 6],
ResultList = lists:filter(fun(X) X rem 2 =:= 0 -> end, ListOfLists),

したがって、ResultList は、fun から true を返すすべての要素になります。

[2,4,6]

次に、それに次のフィルターを適用する必要があります。

于 2012-04-16T13:27:49.970 に答える
0

リストを新しい要素と組み合わせるために再帰的な方法を使用した解決策を得ました。次に例を示します。

combine_list_subscriber([First | Rest]) ->
    {Subscriber} = bson:lookup ('subscriber', First),
    [Subscriber | combine_list_subscriber(Rest)];
combine_list_subscriber([]) ->
    [].

ありがとう、アジェイ

于 2012-04-23T10:28:29.477 に答える