在将函数应用于两者时返回元组格式的列表

时间:2013-09-29 21:28:42

标签: haskell

我正在尝试创建一个接收列表的函数,应用一个给出布尔值的函数,并将列表分成两个创建一个元组的列表。

例如,如果我将表达式分开odd [1,2,3,4,5]。我会得到输出([1,3,5],[2,4])

我的代码到目前为止是:

separate:: (a->Bool) -> [a] -> ([a], [a])
separate func []        = ([], [])
separate func [x]       = if(func x == True) then ([x], []) else ([], [x])
separate func (x:xs)    = if(func x == True) then (x : (fork func xs), []) else ([], x : (fork func xs))

空列表和单个列表的前两个部分按预期工作,但函数的实际部分不起作用。我不确定如何递归执行表达式,同时构建两个不同的列表。

我尝试过使用内置过滤器和地图功能,但没有取得真正的成功。如果有人就如何实现这一点提出建议,我会很感激!

1 个答案:

答案 0 :(得分:4)

您可以使用hoogle查找知道其签名的函数。

hoogle (a->Bool) -> [a] -> ([a], [a])返回partition作为答案之一:

Prelude Data.List> partition odd [1,2,3,4,5]
([1,3,5],[2,4])