我得到了這個項目做Im類型卡住了。我知道這不是太複雜,但我用完了想法。Haskell從列表中平均排序
那麼我所定義的那些類型:
-- Types
type Title = String
type Director = String
type Year = Int
type Mark = Int
type Rating = (String, Int)
-- Define Film type here
type Film = (Title, Director, Year, [Rating])
-- Define database type here
type Database = [Film]
testDatabase :: [Film]
testDatabase =
[("Casino Royale", "Martin Campbell", 2006, [("Garry",8),("Dave", 0)])
,("Blade Runner", "Ridley Scott", 1982, [("Amy",5),("Dave", 9]),
,("The Fly", "David Cronenberg", 1986, [("Fred",7),("Dave", 4)])
]
所以現在我有顯示平均評分,之後我有要顯示的他們的平均值等於或高於6
薄膜你能給我一些提示/指導嗎?謝謝!
UPDATE:
感謝您的答覆,而是因爲我已經做了該項目的一半,我認爲其後期更改數據類型,因爲我不得不重新考慮一切。
我做了一個嘗試,但它不工作的顯示功能,我不知道爲什麼:
filmRating :: [Rating] -> Int
filmRating rating = div (sum [r | (_,r) <- rating]) (length rating)
averageFilm :: Film -> Int
averageFilm (t, d, y, r) = filmRating r
sixOrHigher :: Int -> Bool
sixOrHigher average
| average <= 6 = True
| otherwise = False
displayAverage :: Database -> String
displayAverage database = displayFilms (filter ((sixOrHigher (averageFilm)) database))
UPDATE2:
我發現的腦殺小時後的溶液併發誓一切:)
再次感謝大家!
這:
averageFilm :: Film -> Int
averageFilm (t, d, y, r) = filmRating r
averageFilms :: Database -> [Int]
averageFilms database = map (averageFilm) database
sixOrHigher :: Int -> Bool
sixOrHigher average
| average <= 6 = True
| otherwise = False
checkAllIfHigher :: Film -> Bool
checkAllIfHigher film = (sixOrHigher (averageFilm film))
displayAverage :: Database -> String
displayAverage database = displayFilmsAverage (filter (checkAllIfHigher) database)
displayFilmsAverage :: Database -> String
displayFilmsAverage database = concat(map (displayFilmAverage) database)
第一步:寫一個函數':: Film - > [Rating]'來獲得電影的所有等級。從這個角度來看,一個函數':: [評級] - >雙',使平均。然後您可以查看提供的排序功能。 – progo
查看'map'函數[here](http://hackage.haskell.org/package/base-4.6.0.1/docs/Prelude.html#v:map)和'sum :: Num a => [a] - > a'和'length :: [a] - > Int'函數。稍後,您需要'filter'函數[here](http://hackage.haskell.org/package/base-4.6.0.1/docs/Prelude.html#v:filter)來選擇電影。您可以在[hoogle](http://www.haskell.org/hoogle/)上搜索功能。 – AndrewC
您的'Mark'類型同義詞不會在任何地方使用 - 您可能打算在定義'Rate'時使用它嗎? –