我有一个接收列表的函数,如果列表中有 2 个相同且连续的数字,并且如果列表中的其他地方有一个数字 x,那么我想将 x 更改为 0 和返回列表。
twoAdjThenThirdZero (x:y:xs) = [if x == y && x `elem` xs then 0 else x | x <- xs]
出于某种原因,每次我尝试运行它时都会忽略列表中的前两个元素。
*Main> twoAdjThenThirdZero [2,3,4,1,2,0,2,3,3]
[4,1,2,0,2,0,0]
此外,上述情况与我想要的相反。我想将两个 3 保留在列表的末尾,并使第二个元素,即 3,为 0。但它被调换了。
*Main> twoAdjThenThirdZero [2,2,3,1,2,4]
[3,1,0,4]
有人知道为什么是这样吗?提前致谢!