我正在尝试创建一个接收列表的函数,如果其中一个元素为负数,则该列表中与其正数对应的任何元素都应更改为 0。例如,如果有 -2在列表中,则该列表中的所有 2 都应更改为 0。
任何想法为什么它只适用于某些情况而不适用于其他情况?我不明白这是为什么,我已经看了好几遍了。
changeToZero [] = []
changeToZero [x] = [x]
changeToZero (x:zs:y:ws) | (x < 0) && ((-1)*(x) == y) = x : zs : 0 : changeToZero ws
changeToZero (x:xs) = x : changeToZero xs
changeToZero [-1,1,-2,2,-3,3]
-- [-1,1,-2,2,-3,3]
changeToZero [-2,1,2,3]
-- [-2,1,0,3]
changeToZero [-2,1,2,3,2]
-- [-2,1,0,3,2]
changeToZero [1,-2,2,2,1]
-- [1,-2,2,0,1]