Erlang中列表解析中的多个过滤器

时间:2013-01-14 15:22:02

标签: erlang

说我有一个包含天气的列表:

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]

如何添加多个过滤器?

1 个答案:

答案 0 :(得分:13)

FoggyAndSnowyPlaces = [X || {X, Y} <- Weather, (Y == fog) or (Y == snow)].

您混淆生成器Pattern <- List)和过滤器(布尔条件)。多个生成器的工作方式类似于其他语言的嵌套循环,因此在3>中,您得到vancouver两次,因为第一个生成器生成两个值。