【发布时间】:2016-03-17 00:40:14
【问题描述】:
我是初学者,任何帮助将不胜感激。我的目标是能够从任何给定的 Film 中提取评分作为 Float,这样我就可以正确地操作数据,例如给出一个“平均评分”电影。
type Title = String
type Director = String
type Year = Int
type Mark = Int
type Rating = (String, Float)
-- Define Film type here
type Film = (Title, Director, Year, [Rating])
典型的电影看起来像
("True Lies", "James Cameron", 1994, [("Dave",3), ("Kevin",10), ("Jo",0)])
我试过了
extractRating :: Film -> [(String, Float)]
extractRating (_, _, _, rating) = rating
然后像这样调用函数
putStrLn (extractRating "True Lies")
如果它可以帮助你在这里帮助我这个错误转储
haskell.hs:82:21:
Couldn't match type ‘(String, Float)’ with ‘Char’
Expected type: String
Actual type: [(String, Float)]
In the first argument of ‘putStrLn’, namely
‘(extractRating "True Lies")’
In a stmt of a 'do' block: putStrLn (extractRating "True Lies")
haskell.hs:82:35:
Couldn't match type ‘[Char]’
with ‘(Title, Director, Year, [Rating])’
Expected type: Film
Actual type: [Char]
In the first argument of ‘extractRating’, namely ‘"True Lies"’
In the first argument of ‘putStrLn’, namely
‘(extractRating "True Lies")’
In a stmt of a 'do' block: putStrLn (extractRating "True Lies")
【问题讨论】:
-
还是那个电影数据库练习??
-
是的,仍然。你每年都会从像我这样的人那里收到这些帖子,认为这是一种传统;)
-
您将
String传递给extractRating函数,该函数需要Film类型作为唯一参数。此外,putStrLn需要String。也许您想改用print? -
这个练习需要你使用元组吗?因为这更适合 Record 类型。
-
我很难为此幽默。这确实是一个糟糕的问题,我找不到任何借口。不管这个练习有多糟糕,你为什么不只是摆弄一下 GHCi 直到你得到它?真的没那么难。