2017-01-11 6 views
1

条件を入力リストに依存するフィルタの作成に興味があります。具体的には、フィルタを定義して、入力リストの任意の数で数値が割り切れるかどうかをチェックしたいと考えています。そうだろう、単一の要素について:リスト要素に基づくフィルタ条件の作成

my_filter a = filter (\x -> x `mod` a == 0) 

基本的に私は入力リストを持っている場合、それは次の操作を行うであろうと、このような拡張したい:

my_filter [a,b] = filter (\x -> x `mod` a == 0 || x `mod` b == 0) 

どのように私はこのフィルタを定義することができます再帰的に、リストの各要素が新しい条件を作成するように?

my_filter divisors = filter (\x -> or $ map ((0 ==) . (x `mod`)) divisors) 

すべての値は除数た場所をフィルタリングしたい場合は、あなただけのandorを変更する必要があります。

答えて

3

は何あなたが探しているのはor機能です。それを行うには

もう一つの方法は、

my_filter divisors = filter (\x -> any (== 0) $ map (x `mod`) divisors) 

だろうこれらは、ほんの少し異なるスタイル同等の機能です。

+6

'any'関数は、この' or'/'map'の組み合わせを正確に書きました! '' 'any(\ d - > x' mod'd == 0) '' 'のように、' map'を条件に半分だけ入れるのではなく、豚全体を移動するだけです。 –

関連する問題