我試圖做一個函數,它在列表中,如果要素之一是否定的,那麼在該列表中等於其積極對應任何內容應改爲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]
表達式'X:ZS:Y:ws'是相當於'[x,zs,y] ++ ws'。因此,'zs'將始終是列表中的單個元素;它永遠不會是多個元素(或者沒有元素)。 –
如果我想ZS是多個元素,將X:ZS:Y使其被認爲是多重的,而不是一個單一的元素?對不起,我盡力學習,因爲我是初學者! – user1670032
恐怕不是。在表達式(或圖案)'一個:B','A'始終是一個單一元件和'B'始終是一個列表;表達式'a:b'相當於'[a] ++ b'。由於':'是右聯合的結果,這意味着在諸如'a:b:c:d'的表達式(或模式)中,最右邊的變量是「列表的其餘部分」,並且其他變量是個別元素。 –