2011-10-07 88 views
0

如何在列表解析中实施AND警卫?用逗号分开看守似乎字:OR列表理解和警卫

1> rd(r, {a, b}). 
r 
2> L = [#r{a = 1, b =2}, #r{a = 1, b = 3}]. 
[#r{a = 1,b = 2},#r{a = 1, b = 3}] 
3> [X || X <- L, X#r.a =/= 1, X#r.b =/= 2]. 
[] 

非常感谢。

回答

7

这绝对是一个AND。第一个元素不能通过两个测试;第二次失败X#r.a =/= 1测试。

如果你想要或者,只需使用orelse操作:

2> [X || X <- L, X#r.a =/= 1 orelse X#r.b =/= 2]. 
[#r{a = 1,b = 3}] 
+0

哦,上帝。我心何在?谢谢。我试图做的是包含如果双方都满意的要素。 –

+0

@MartinDimitrov:我已经修改了我的答案以涵盖OR。 –

+0

非常感谢您的帮助。 –