У меня проблема с тем, что у меня есть список кортежей ("Song Name", "Artist Name", SalesFig)
, и мне нужно отфильтровать кортеж в этом списке, который содержит определенные c Имя песни и Имя исполнителя, и вернуть все другие кортежи в этом списке.
Ниже мой код:
testData = [("No Lie", "Sean Paul feat. Dua Lipa", 100),
("Yes Lie", "Sean Paul feat. Dua Lipa", 10),
("Fear & Delight", "The Correspondents", 120),
("Hello", "Adelle", 4)]
filterTrack :: String -> String -> [(String, String, Int)] -> [(String, String, Int)]
filterTrack songName artistName items = filter p items
where p (song', artist', _) = songName /= song' && artistName /= artist'
Теперь проблема, с которой я столкнулся с codee, заключается в том, что когда я хочу отфильтровать одну из двух песен в списке и ввести, скажем, filterTrack "Yes Lie" "Sean Paul feat. Dua Lipa" testData
чтобы удалить "Yes Lie"
из списка, программа удаляет и другую песню того же исполнителя, "No Lie"
.
Я не уверен, почему это происходит, так как у меня есть выражение, которое требует ввода чтобы не совпадать с songName and
artistName. Я мог бы понять, почему это происходит, если бы было OR
, а не AND
, поскольку это было бы верно, если бы одно из условий было истинным.
Я бы подумал, что использование AND
будет make так, что он возвращает каждый кортеж, который в точности не соответствует Song Name
и Artist Name
, а не только Artist Name