Haskell 如何筛选结果以正确显示

Haskell 如何筛选结果以正确显示,haskell,functional-programming,Haskell,Functional Programming,我在数据库中有一个电影列表 type Database = [Film] type Title = String type Actor = String type Cast = [Actor] type Fan = String type Fans = [Fan] type Year = Int type Period = (Year, Year) type Film = (Title, Cast, Year, Fans) 我想做的是从我的列表中找出哪部电影 功能一 拥有最多的粉丝 按特定角

我在数据库中有一个电影列表

type Database = [Film]
type Title = String
type Actor = String
type Cast = [Actor]
type Fan = String
type Fans = [Fan]
type Year = Int
type Period = (Year, Year)
type Film = (Title, Cast, Year, Fans)
我想做的是从我的列表中找出哪部电影

功能一

  • 拥有最多的粉丝
  • 按特定角色名称筛选
功能二

  • 前五名电影总数(按粉丝数量)
  • 降序

     

我目前有两段代码,我正在努力使它们协同工作。或者找到更好的解决方案:

inCast :: Actor -> Film -> Bool
inCast givenActor (_, cast, _, _) = any (\actor -> actor == givenActor) cast

我是不是完全错了

非常感谢您事先提供的帮助

编辑: 我有额外的代码。我似乎不能用它来帮助我解决这个问题。 有什么想法吗

filmsWithFan :: Fan -> [Film]
filmsWithFan givenFan = filter (isFan givenFan) testDatabase

我认为你的思路是正确的。尽管最后一个功能,
filmsWithFan
,在这种情况下对您没有帮助。我会给你一些提示:

功能1:

首先考虑您想要为函数设置的类型签名:

topByFanAndActor :: Actor ->  Database -> Film
topByFanAndActor actor films = undefined
考虑如何将您提供的两个功能结合起来,主要是
inCast
bestFilm
,以实现该类型签名。您肯定需要使用处理列表的高阶函数。如果你需要另一个提示,我可以告诉你那是什么函数

编辑:

因此,您需要将给定的
电影列表
转换为给定的
演员
主演的电影列表。要做到这一点,您需要使用函数
inCast
查看该列表。之后,您需要从该列表中提取具有最大粉丝数的电影,为此,您将使用
bestFilm

功能2:

在这种情况下,类型签名将非常简单:

topFiveDesc :: Database -> Database
但是,如果将电影数量设置为返回变量,则可以使其变得更好:

topDesc :: Database -> Int -> Database
topDesc films num = undefined

想一想你现在对这些电影到底做了什么。您需要根据特定的标准(风扇数量)对其进行排序。定义的标准与
bestFilm
中的标准类似。然后你需要从列表中选择第一部电影。

我认为你的思路是正确的。尽管最后一个功能,
filmsWithFan
,在这种情况下对您没有帮助。我会给你一些提示:

功能1:

首先考虑您想要为函数设置的类型签名:

topByFanAndActor :: Actor ->  Database -> Film
topByFanAndActor actor films = undefined
考虑如何将您提供的两个功能结合起来,主要是
inCast
bestFilm
,以实现该类型签名。您肯定需要使用处理列表的高阶函数。如果你需要另一个提示,我可以告诉你那是什么函数

编辑:

因此,您需要将给定的
电影列表
转换为给定的
演员
主演的电影列表。要做到这一点,您需要使用函数
inCast
查看该列表。之后,您需要从该列表中提取具有最大粉丝数的电影,为此,您将使用
bestFilm

功能2:

在这种情况下,类型签名将非常简单:

topFiveDesc :: Database -> Database
但是,如果将电影数量设置为返回变量,则可以使其变得更好:

topDesc :: Database -> Int -> Database
topDesc films num = undefined

想一想你现在对这些电影到底做了什么。您需要根据特定的标准(风扇数量)对其进行排序。定义的标准与
bestFilm
中的标准类似。然后你需要从列表中选择第一部电影。

这是家庭作业问题吗?昨天发布了一个类似的消息:。如果是作业,请贴上这样的标签。这也是为什么我只是给你一些提示,而不是整个答案。这也是你想要的。这是一个家庭作业问题吗?昨天发布了一个类似的消息:。如果是作业,请贴上这样的标签。这也是为什么我只是给你一些提示,而不是整个答案。这也是你想要的。好吧,因为这看起来像是家庭作业,我不会给你两个问题的完整答案。选择一个你想让我详细说明的,我相信你会得到另一个。好的,我编辑了它。现在看一下,看看这是否有帮助。我添加了一个链接到
filter
,以防您遇到困难。好的,因为这看起来像是家庭作业,所以我不会给您这两个问题的完整答案。选择一个你想让我详细说明的,我相信你会得到另一个。好的,我编辑了它。现在看看这是否有帮助。我添加了一个指向
过滤器的链接,以防您遇到困难。