如何在Haskell中生成两个列表

时间:2019-01-06 15:20:38

标签: list haskell

如何在haskell中获取列表并生成两个列表作为输出?

例如,我正在处理的一个问题要求创建一个程序,该程序需要一个 谓词和一个列表,并返回两个列表的列表,第一个 输入列表中那些通过谓词的元素, 其次是那些没有的,例如

 tear (>5) [1,10,2,12,3,13]

=> [[10,12,13],[1,2,3]]

我到目前为止所拥有的:

tear f [] = []
tear f (x:xs)
 | f x = x: tear f xs
 | otherwise = tear f xs

哪个生产

tear (>5) [1,10,2,12,3,13]
[10,12,13]

1 个答案:

答案 0 :(得分:4)

按照@WillemVanOnsem的建议使用2元组:

tear f [] = ([],[])
tear f (x:xs)
 | f x = (x:y,z)
 | otherwise = (y,x:z)
    where (y,z) = tear f xs