2013-02-19 12 views

答えて

11

あなたはData.Listからpartition機能を探しています:

partition :: (a -> Bool) -> [a] -> ([a], [a]) 

それは折り目を使用してうまく実装できます

splitBy pred = foldr f ([], []) 
    where f x ~(yes, no) = if pred x then (x : yes, no) 
            else (yes, x : no) 
+0

ありがとう、ありがとう。 – crimsonlander

+0

これは 'f x〜(yes、no)= if ...'でなければなりません。無限リスト上ではまったく動作せず、長い有限リストに対しては効率が悪いでしょう。 –

+0

@ダニエル:私はその構文を見たことがない、それはどういう意味ですか?非厳密なタプル? –