splitBy pred list = (filter pred list, filter (not . pred) list)
のようなものの1回のパスで何かをしたいです。
splitBy pred list = (filter pred list, filter (not . pred) list)
のようなものの1回のパスで何かをしたいです。
あなたは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)
ありがとう、ありがとう。 – crimsonlander
これは 'f x〜(yes、no)= if ...'でなければなりません。無限リスト上ではまったく動作せず、長い有限リストに対しては効率が悪いでしょう。 –
@ダニエル:私はその構文を見たことがない、それはどういう意味ですか?非厳密なタプル? –
Hoogleはあなたの友達です。 – augustss