2012-04-16 111 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([]) -> 
    []. 

感谢, 阿贾伊

相关问题