从两个列表中过滤元素

时间:2014-04-18 19:44:09

标签: functional-programming erlang otp concurrent-programming

基本上我有两个类似

的列表
L1 = [one, two, three, five, eleven, million]
L2 = [five, million]

所以我想过滤第二个列表L2中的元素

获取

[one, two, tree, eleven]

我使用foldl函数来循环L1,然后使用foreach循环来决定要从列表2中追加的元素,但我似乎没有得到正确的逻辑:我有类似的东西

56 filter_a(L1,L2) ->
 57    List = foldl(fun(X,A) ->
 58                 L = lists:foreach(fun(E) ->
 59                             case E =:= X of
 60                                 true ->
 61                                     [];
 62                                 _-> 
 63                                     X
 64                             end 
 65                     end, L2),
 66                 lists:append([A,[L]])
 67         end, [], L1),
 68    List.

我怎样才能以一种简单的方式做到这一点?

2 个答案:

答案 0 :(得分:3)

为什么不只是L1 -- L2?复杂度与O(N * M)相同。

答案 1 :(得分:2)

您可以使用列表理解:

filter_a(L1,L2) ->
    [ X || X <- L1, lists:member(X,L2) =/= true ].