リストを取り込む関数を作成しようとしていますが、要素の1つが負の場合、そのリスト内の正の要素と等しい要素はすべて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]