我想要一个计算给定标记列表的平均标记的函数.这是我到目前为止所做的:
getAverageRate :: [Int]->Int
getAverageRate marks = (fromIntegral (foldr (+) 0 marks))/(fromIntegral (length marks))
Run Code Online (Sandbox Code Playgroud)
我想要做的是通过使用'foldr'然后除以'length marks'来获得列表中所有标记的总和.尽管我已经使用'fromIntegral'这个错误仍然出现,我找不到问题.
No instance for (Fractional Int) arising from a use of `/'
Possible fix: add an instance declaration for (Fractional Int)
In the expression:
(fromIntegral (foldr (+) 0 marks)) / (fromIntegral (length marks))
In an equation for `getAverageRate':
getAverageRate marks
= (fromIntegral (foldr (+) 0 marks))
/ (fromIntegral (length marks))
Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的问题,但在我发布之前,我花了四个小时来指出问题所在.
data Film = Film {title :: String
,name :: String
,year :: Int}
deriving (Show)
testDatabase :: [Film]
testDatabase = [ ("Blade Runner", "Ridley Scott",1982)]
--(i) Add new film to the database
addFilm :: String -> String -> Int -> [Film] -> [Film]
addFilm title director year film = film + Film title director year
--(ii) Give all film in the database
getFilm :: [Film]
getFilm = testDatabase
Run Code Online (Sandbox Code Playgroud)
我想要做的是定义一个新的类型名称Film
,其中包含:电影片名,电影导演和制作年份.
Testdatabase
用于存储数据.
addFilm
是一个向数据库添加更多电影的功能.
getfilm
用于打印出电影列表.
这就是错误的样子.
coursework.hs:21:18: …
Run Code Online (Sandbox Code Playgroud)