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
,以防您遇到困难。好的,因为这看起来像是家庭作业,所以我不会给您这两个问题的完整答案。选择一个你想让我详细说明的,我相信你会得到另一个。好的,我编辑了它。现在看看这是否有帮助。我添加了一个指向过滤器的链接,以防您遇到困难。