我刚写了一个小函数,因为我在Hackage上找不到它,但我很确定它必须在那里而我却找不到它。有人知道它是否存在于某个地方吗?
我告诉你:cinderella :: (a -> Bool) -> [a] -> ([a], [a])
cinderella f = foldr (\x (a,b) -> if f x then (x:a,b) else (a,x:b)) ([],[])
相当于:
filterFilter f l = (filter f l, filter (not . f) l)
...但可能不会进行两次遍历。