说我有一个包含天气的列表:
1> Weather = [{toronto, rain}, {montreal, storms}, {london, fog},
{paris, sun}, {boston, fog}, {vancouver, snow}].
为了得到迷雾的地方,我可以这样做:
2> FoggyPlaces = [X || {X, fog} <- Weather].
[london,boston]
现在我想要检索有雾和多雪的地方。我尝试了这个,但它只检索了雪地,
3> FoggyAndSnowyPlaces = [X || {X, fog} <- Weather, {X,snow} <- Weather].
[vancouver,vancouver]
我期待[london,boston,vancouver]
。
如何添加多个过滤器?
答案 0 :(得分:13)
FoggyAndSnowyPlaces = [X || {X, Y} <- Weather, (Y == fog) or (Y == snow)].
您混淆生成器(Pattern <- List
)和过滤器(布尔条件)。多个生成器的工作方式类似于其他语言的嵌套循环,因此在3>
中,您得到vancouver
两次,因为第一个生成器生成两个值。