タプルの最初の要素が別のリストの要素と一致するかどうかに基づいて、タプルのリストをフィルタリングしようとしています。Erlangでリスト内包の複数(タプルベース)ジェネレータ
たとえば、元のリストは
163>Shoppinglist.
[{oranges,2},{milk,1},{apples,2}]
私は<-
表記で複数の発電機を使用しようとすると、それがループして要素の結果は、一度このようなより多くの繰り返しです:
164> [(Item)||{Item,Unit}<-Shoppinglist, Item<-[apples,milk]].
[apples,milk,apples,milk,apples,milk]
これは、この質問のAlexey Romanovの答えでうまく説明されています:Multiple filters in list comprehension in Erlang。この回答に基づいて、私は以下を行うことができ、それは正常に動作します。
165>[{Item}||{Item,Unit}<-Shoppinglist,(Item==apples) or (Item==milk)].
[apples, milk]
しかし、私は、入力として来て第二のリストItem<-[apples,milk]
をしたいと思いますので、これは本当に、私のニーズを満たしていない、そして常に手動のため(Item==apples) or (Item==milk)
のようなすべてのマッチを一覧表示するのは実用的ではないかもしれないので、非常に長いリスト。
実際に発電機として複数のリストを使用する方法はありますか?または私の問題を解決するより巧妙な方法。私はまだ非常にErlang(Pragmatic ProgrammingとLYSEの本を持つ)で始まったので、私はまだほとんど知りません。
質問を書いた直後に、2番目のリストをタプルのリストに変換して、ただ1つのジェネレータを使うことができました。 | {Item、_Unit} < - [{apples、0}、{milk、0}]]。これは私がまだ知らない新しいことを紹介し、さらに学習曲線を上げています。http://stackoverflow.com/questions/5214821/list-to-tuples-convertionとhttp://stackoverflow.com/questions/3936613/erlang-prepending-an-element-to-a-tuple – Yogesch