将整数列表拆分为2个列表:一个是正数,另一个是负数 - haskell

时间:2014-06-21 16:51:53

标签: haskell

如何将整数列表拆分为2个列表:一个是正数,另一个是负数?

这是我的尝试:

是否可以这样做?

split:: [Int]->[[Int]]
split [] =[[]]
split xs =[x|x<-xs, x<0]:[y|y<-xs, x>=0]

我的第二次尝试:

split:: [Int]->([Int],[Int])
split [] =([],[])
split xs = ([x|x<-xs,x<0],[y|y<-xs,y>=0])
不知怎的,我仍然没有得到正确的结果。

当我跑

   split [1,2-2,3-4]

我得到了

   ([-1],[1,0])   

1 个答案:

答案 0 :(得分:3)

您可以使用partition功能执行此操作:

import Data.List

split = partition (>=0)

您的尝试有一些问题。首先,您需要将x:xs模式加括号,否则它将被解析为(split x):xs,这不是您的意思。其次,它会产生一个类型错误,因为右侧的:运算符应该被赋予一个元素作为其左参数,并且这些元素的列表作为其右参数,但是您已经给它一个列表作为两个论点。最后,因为您只想返回两个列表,所以应该使用返回类型的元组,而不是嵌套列表。

相关问题