我在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]
任何帮助表示赞赏
答案 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]