2012-04-16 110 views
0

Erlang將元素添加到同一個列表中? erlang有可能嗎?如果不是那麼請幫助我的人用任何替代解決方案來實現這一點。Erlang將元素添加到同一個列表中

這是我必須做的實際要求如下:

我有多個ID列表因此基於列表的ID,我必須獲取所有用戶的電子郵件ID,其地位不等於「B」,「U '(退回和取消訂閱)列入1個列表,之後我必須從該列表中刪除重複的電子郵件ID訂閱者,一旦我獲得適當的ListSubscriber,然後我將循環併發送電子郵件給所有獨特的訂閱者。當我收到訂戶 並且當循環轉到第二個並獲取訂戶並且它將添加到相同列表時,將它循環到列表中以獲取所有訂戶時出現問題拋出錯誤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說,並張貼在你前面的問題是什麼,你必須創建一個新的變量,並分配的'返回值將:: append()'列入新變量。 – 2012-04-16 11:12:13

+0

Ajay,在函數式語言中編程與在諸如Java,Python,JavaScript等命令式語言中進行編程非常不同。在Erlang中,數據結構是不可變的,變量只能被綁定一次,沒有內置的循環結構。這是一種非常不同於你習慣的語言。 – dsmith 2012-04-16 15:25:55

回答

1

Erlang是單配置函數語言。你所要做的就是分配一個var第一個列表,並將var分配給第二個下一個concat列表,這將使你得到帶有結果的ListThree。 因此,您在「更改」(添加,刪除,更新等)時總是生成新的列表。

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

時應用過濾器除去不需要你產生另一個列表,

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

等你總是每次你改變一些東西永遠不會改變之前的一個時間產生新的名單。

在你的情況ListSubscribers只能在FORALL樂趣,你應該將其更改爲類似地圖和您的mapfilter將產生結果列表這樣的範圍是可見的。

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

所以ResultList將是所有從我們的樂趣中返回true的元素。

[2,4,6] 

接下來,您將不得不對其應用下一個過濾器。

1

請注意,Erlang是一種函數式編程語言。它與命令式語言如C或PHP完全不同。編碼Erlang 要求對函數式編程有基本的瞭解,包括單一賦值,遞歸,高階函數以及可能的列表解析。

列表解析在您的方案中可能非常有用。我多想你想要做什麼,可以這樣寫:

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

嘿,埃米爾,感謝您的建議,我很想erlang ...所以無法正確地得到它以上給出的是什麼......這是什麼...發生了什麼...請儘可能解釋。 .. – 2012-04-17 09:38:42

+0

什麼是emailmarketing的返回類型:get_list_subscribers/1和你想要ListSubscribers看起來像什麼? – 2012-04-17 09:40:59

+0

不,我不會進一步解釋我的代碼,因爲它非常簡單。請參考Erlang文檔或關於這個主題的書(我使用O'Reilly的* Erlang編程*)。閱讀關於列表解析的內容。 – 2012-04-17 09:43:56

0

我得到了解決辦法,我已經使用遞歸方法進入我的列表與新的元素結合起來。這裏是例子:

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

感謝, 阿賈伊

相關問題