2013-11-20 56 views
0

我剛剛寫了一個小函數,因爲我在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) 

...但可能不會做兩個遍歷。

+6

http://www.haskell.org/hoogle/?hoogle=(a+-%3E+Bool)+-%3E+%5Ba%5D+-%3E+(%5Ba%5D%2C+%5Ba%5D)'分區功能? – dorchard

+0

「break」僅在最長的匹配前綴處分裂。 – fho

+0

@Florian有3個項目,請檢查所有項目(提示分區是第3個) – jozefg

回答

12

您想要partition功能。

+0

補充它你太快了。 +1雖然 – jozefg

+0

啊好的...這太容易了......我使用'Foldable'實現它,並沒有檢查'Data.List' ... – fho