展望列表理解列表

时间:2014-10-16 10:21:47

标签: haskell

我在Haskell中使用列表理解时遇到了一些麻烦。我的问题是,在使用列表理解时,如何在列表中展望未来。例如:假设我有一个列表[1,2,3,4,5]作为列表推导函数的参数。此函数必须从此列表构建新列表,但条件是如果下一个元素相同,则不要在列表中包含该元素。

build [] = []
build list = [x | x <- list, (if current element equal next ignore)]

因此列表[1,1,2,3,4,4,4]将输出[1,2,3]

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:2)

通过在输出中不包括4,似乎你总是丢弃最后一个元素。如果是这种情况,那就是你要找的东西:

build xs =  [x | (x,y) <- zip xs $ tail xs, x/=y]

答案 1 :(得分:1)

如果4意图包含在示例中(我不明白为什么不这样做),那么更好一点:

build [] = []
build xs@(x:_) = x:[y | (x:y:_) <- tails xs, x/=y]