0
因此,我有一部電影的評級列表,如果新用戶對該電影評級,則會將其添加到列表中。但是,如果現有用戶已對其評級,則再次對其進行評級會導致舊評級更改爲新評級。這是到目前爲止我的代碼:從列表中刪除元素並將其替換爲新值
rateFilm :: String -> String -> Int -> [Film] -> [Rating]
rateFilm _ _ _ [] = []
rateFilm user title number (x:xs) = if title == name then do
if user == existingUser then do
removeItem (user,number) ratings
ratings ++ [(user,number)]
else do
ratings ++ [(user,number)]
else do
rateFilm user title number xs
where (name, director, year, ratings) = x
(existingUser,score) = getUser user ratings
removeItem :: Rating -> [Rating] -> [Rating]
removeItem _ [] = []
removeItem x (y:ys) | x == y = removeItem x ys
| otherwise = y : removeItem x ys
而對於影片中的信息是這樣的:
[("Blade Runner","Ridley Scott",1982,[("Amy",6),("Bill",9),("Ian",7),("Kevin",9),("Emma",4),("Sam",5),("Megan",4)]),
("The Fly","David Cronenberg",1986,[("Megan",4),("Fred",7),("Chris",5),("Ian",0),("Amy",5)]),
("Psycho","Alfred Hitchcock",1960,[("Bill",4),("Jo",4),("Garry",8),("Kevin",7),("Olga",8),("Liz",10),("Ian",9)]),
("Body Of Lies","Ridley Scott",2008,[("Sam",3),("Neal",7),("Kevin",2),("Chris",5),("Olga",6)])]
當新用戶增加了一個評價它是好的,輸出會是這樣:
rateFilm "Alex" "Blade Runner" 8 testDatabase1
[("Amy",6),("Bill",9),("Ian",7),("Kevin",9),("Emma",4),("Sam",5),("Megan",4),("Alex",8)]
然而,當現有的用戶這樣做,出現這種情況:
rateFilm "Amy" "Blade Runner" 8 testDatabase1
[("Amy",6),("Bill",9),("Ian",7),("Kevin",9),("Emma",4),("Sam",5),("Megan",4),("Amy",8),
("Amy",6),("Bill",9),("Ian",7),("Kevin",9),("Emma",4),("Sam",5),("Megan",4),("Amy",8),
("Amy",6),("Bill",9),("Ian",7),("Kevin",9),("Emma",4),("Sam",5),("Megan",4),("Amy",8),
("Amy",6),("Bill",9),("Ian",7),("Kevin",9),("Emma",4),("Sam",5),("Megan",4),("Amy",8),
("Amy",6),("Bill",9),("Ian",7),("Kevin",9),("Emma",4),("Sam",5),("Megan",4),("Amy",8),
("Amy",6),("Bill",9),("Ian",7),("Kevin",9),("Emma",4),("Sam",5),("Megan",4),("Amy",8),
("Amy",6),("Bill",9),("Ian",7),("Kevin",9),("Emma",4),("Sam",5),("Megan",4),("Amy",8)]
關於爲什麼和/或如何解決它的任何想法?非常感激。
這個代碼可以做了很多更具可讀性(IMO)如果一個case語句中的'(標題==名稱中使用,用戶== existingUser )',[像這樣](https://gist.github.com/bheklilr/08b4ffbfcf6bbfa34af0)。 – bheklilr
謝謝,非常有幫助,現在有更多更好看的代碼:) – AlexJonBarry