【问题标题】:Haskell - Average of Lists of Tuples [duplicate]Haskell - 元组列表的平均值 [重复]
【发布时间】:2012-05-01 12:58:20
【问题描述】:

可能重复:
Haskell - Selectively Adding Lists

我有一个数据类型:

data Film = Film String String Int [Rating]
     deriving (Show,Ord,Eq, Read)

样片:

("Ridley Scott","Alien",1979,[("Mark",5),("Zoe",3)])

我将如何获得 [电影] 列表中所有电影的平均导演评分?

因此,如果雷德利·斯科特有 2 部电影的平均得分均为 5,那么他的总体平均得分为 5。

我只有制作一部电影的代码

filmRating :: [(String,Int)] -> Float
filmRating ratings = average (map snd ratings) 

【问题讨论】:

  • 你能告诉我们你尝试写的代码吗?
  • 我只有代码来计算单个 Film filmRating :: [(String,Int)] -> Float filmRating rating = average (map snd rating)
  • 编写一个函数Film -> Float,它将返回电影的平均分数(使用模式匹配)。然后,编写一个函数[Film] -> Float,它将返回电影列表的平均分数(使用average和以前的函数)。
  • @sdcvvc:这不是他想要达到的。他想要每个导演的平均分数:)

标签: haskell


【解决方案1】:

不是真正的答案,只是一些新手笔记。

您可以为DirectorTitle 和所有其他类型使用类型别名。

type Director = String
type Rate = Double
type Rater = String
type Ratings = [(Rater, Rate)]
type Title = String
type Year = Int

data Film = Film Director Director Year Ratings
     deriving (Show,Ord,Eq, Read)

这就是为什么您的 film 示例应如下所示:

film = Film "Ridley Scott" "Alien" 1979 [("Mark",5),("Zoe",3)]

如果您有一个名为filmRating 的函数,它应该类似于:: Film -> Rate

filmRating :: Film -> Rate
filmRating (Film _ _ _ ratings) = average (map snd ratings)

我将如何获得 [电影] 列表中所有电影的平均导演评分?

你想要directorsAverageRate :: Director -> [Film] -> Rate之类的东西。

首先,您需要使用一些:: Film -> Director 函数按Director 值过滤电影。对于这个过滤列表,您只需使用average . (map filmRating) 即可获得平均费率。


UPD

我不明白在涉及电影之后如何获得总体平均水平。

让我们从similar question中获取average函数的定义:

average :: (Real a, Fractional b) => [a] -> b
average xs = realToFrac (sum xs) / genericLength xs

然后

> let one_film = Film "Ridley Scott" "Alien" 1979 [("Mark",5),("Zoe",3)]
one_film :: Film

> let another_film = Film "Ridley Scott" "Alien2" 2979 [("Mark",4),("Zoe",2)]
another_film :: Film

> let films = [one_film, another_film]
films :: [Film]

> average . (map filmRating) $ films
3.5
it :: Double

【讨论】:

  • 是的,我了解过滤,但我不明白在涉及电影后如何获得总体平均值。
猜你喜欢
  • 1970-01-01
  • 2021-06-03
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2018-06-21
  • 1970-01-01
  • 2018-09-30
相关资源
最近更新 更多