我有這個功能可以刪除列表列表中給定元素的出現。刪除列表中的給定元素的出現
remove :: Eq a => a -> [[a]] -> [[a]]
remove y [] = error "Can't remove an element from an empty list"
remove y xs = map (filter(/=y)) xs
我怎麼能夠做同樣的使用列表理解
謝謝
我有這個功能可以刪除列表列表中給定元素的出現。刪除列表中的給定元素的出現
remove :: Eq a => a -> [[a]] -> [[a]]
remove y [] = error "Can't remove an element from an empty list"
remove y xs = map (filter(/=y)) xs
我怎麼能夠做同樣的使用列表理解
謝謝
對於xs
每個l
,添加filter (/= xs) l
到所得的列表:
remove y xs = [filter (/= y) l | l <- xs]
,或者通過嵌套推導除去過濾器。 對於xss
併爲每個x
在xs
每個xs
,保持x
只有當它的不同y
:
remove y xss = [ [x| x <- xs, x /= y] | xs <- xss]
這是確定的,如果你只是在練習,但你的版本map
是更好的方式:)
爲什麼'刪除y []'錯誤,例如'刪除y [[]]'和'刪除y [[y + 1]]'是不是錯誤? – dave4420
謝謝戴夫我會添加這些erros謝謝:) – Moe
@Mike:你不應該讓他們錯誤。如果你從空列表中刪除'y',它仍然是一個空列表...在這種情況下,函數應該是全部的,錯誤只會使它更難使用。 –