2012-04-16 30 views
0

Erlangを同じリストに追加しますか?エルランでは可能ですか?そうでない場合は、他の解決策でこれを達成するために誰かを助けてください。次のように私がしなければならないErlangを同じリストに追加する

実際の要件は次のとおりです。

私はリストIDに基づいて、複数のリストIDを持って、私は「、その状態を「B」に等しくないすべての加入者の電子メールIDを取得する必要がU私は適切なListSubscriberを取得したら、それをループして、すべてのユニークなサブスクライバに電子メールを送信します。そのリストのサブスクライバから重複した電子メールIDを削除する必要があります。ここで問題が発生するのは、サブスクライバを初めて取得するときにループするときです。 ループが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. 

ありがとう!

+1

何@schが言ったとどのようなあなたの前の質問に投稿された、新しい変数を作成し、 'の戻り値を代入する必要があります同じようにlists :: append() 'をその新しい変数に追加します。 –

+0

Ajayでは、関数型言語でのプログラミングは、Java、Python、JavaScriptなどの命令型言語でのプログラミングとはまったく異なります。Erlangでは、データ構造は不変で、変数は一度しかバインドできません。これはあなたが慣れ親しんでいる言語とは非常に異なる言語です。 – dsmith

答えて

1

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

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

次のあなたは、不要な除去フィルターを適用するときに別のリストを生成し、

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

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

ListSubscribersは、マップのようなものに変更する必要がありますし、あなたのmapfilterはこのような結果リストを生成しますのみ、FORALLの楽しみの範囲で表示されます。

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

ResultListは、私たちの楽しさから真を返すすべての要素になります。

[2,4,6] 

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

1

Erlangは関数型プログラミング言語です。それはCやPHPのような命令的言語とはまったく異なります。コーディングErlang は、単精度割り当て、再帰、高次関数、および場合によってはリスト内包を含む関数型プログラミングの基本的な理解を必要とします。

あなたのシナリオでは、リスト内包表記が本当に便利です。私は新しい要素との私のリストを結合するために再帰的なメソッドを使用しているソリューションを持っ

ListSubscribers = lists:flatten([emailmarketing:get_list_subscribers(ListId) || ListId <- ListIds]) 
+0

ちょっとエミール、あなたの提案をありがとう、私はerlangするためにbegineerです...あなたが上に与えたものを適切に得ることができない...これは何ですか...これで起こっていることは...可能であれば説明してください。 .. –

+0

電子メールマーケティングの戻り値のタイプは何ですか:get_list_subscribers/1およびListSubscribersの外観をどのようにしますか? –

+0

いいえ、私は自分のコードをもっと簡単に説明しません。 Erlangのドキュメントまたはそのテーマに関する本を参照してください(私は、O'Reillyの* Erlang Programming *を使用しています)。リスト内包表記について読む。 –

0

:私はあなたが何をしようとしての多くは、このように書くことができると思います。次に例を示します。

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

おかげで、 アジャイ

関連する問題