Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database haskell中列表的降序排序_Database_Sorting_Haskell - Fatal编程技术网

Database haskell中列表的降序排序

Database haskell中列表的降序排序,database,sorting,haskell,Database,Sorting,Haskell,我试图给出一年内或一年后发行的所有电影,按网站评级的降序排列 我已经成功地创建了一个函数来返回平均评级和一个函数来过滤数据库并返回给定年份的电影 这里的问题是,我如何将这两者放在一起,并按降序排列。我对此不太确定或不太感兴趣,需要一些帮助 import Data.List import Text.Printf import Data.Ord type Rating = (String, Int) type Title = String type Director = String type

我试图给出一年内或一年后发行的所有电影,按网站评级的降序排列

我已经成功地创建了一个函数来返回平均评级和一个函数来过滤数据库并返回给定年份的电影

这里的问题是,我如何将这两者放在一起,并按降序排列。我对此不太确定或不太感兴趣,需要一些帮助

import Data.List 
import Text.Printf
import Data.Ord

type Rating = (String, Int)
type Title = String
type Director = String
type Year = Int
type Film = (Title, Director, Year,[Rating])

testDatabase :: [Film]
testDatabase = [("Blade Runner","Ridley Scott",1982,[("Amy",6), ("Bill",9), ("Ian",7), ("Kevin",9), ("Emma",4), ("Sam",5), ("Megan",4)]),
                ("The Fly","David Cronenberg",1986,[("Megan",4), ("Fred",7), ("Chris",5), ("Ian",0), ("Amy",5)]),
                ("Psycho","Alfred Hitchcock",1960,[("Bill",4), ("Jo",4), ("Garry",8), ("Kevin",7), ("Olga",8), ("Liz",10), ("Ian",9)]),
                ("Body Of Lies","Ridley Scott",2008,[("Sam",3), ("Neal",7), ("Kevin",2), ("Chris",5), ("Olga",6)]),
                ("Avatar","James Cameron",2009,[("Olga",2), ("Wally",8), ("Megan",9), ("Tim",5), ("Zoe",8), ("Emma",3)]),
                ("Titanic","James Cameron",1997,[("Zoe",7), ("Amy",2), ("Emma",5), ("Heidi",3), ("Jo",8), ("Megan",5), ("Olga",7), ("Tim",10)]),
                ("The Departed","Martin Scorsese",2006,[("Heidi",2), ("Jo",8), ("Megan",5), ("Tim",2), ("Fred",5)]),
                ("Aliens","Ridley Scott",1986,[("Fred",8), ("Dave",6), ("Amy",10), ("Bill",7), ("Wally",2), ("Zoe",5)]),
                ("Prometheus","Ridley Scott",2012,[("Garry",3), ("Chris",4), ("Emma",5), ("Bill",1), ("Dave",3)]),
                ("E.T. The Extra-Terrestrial","Steven Spielberg",1982,[("Ian",7), ("Amy",2), ("Emma",7), ("Sam",8), ("Wally",5), ("Zoe",6)]),
                ("The Birds","Alfred Hitchcock",1963,[("Garry",7), ("Kevin",9), ("Olga",4), ("Tim",7), ("Wally",3)]),
                ("Goodfellas","Martin Scorsese",1990,[("Emma",7), ("Sam",9), ("Wally",5), ("Dave",3)]),
                ("The Shawshank Redemption","Frank Darabont",1994,[("Jo",8), ("Sam",10), ("Zoe",3), ("Dave",7), ("Emma",3), ("Garry",10), ("Kevin",7)]),
                ("Gladiator","Ridley Scott",2000,[("Garry",7), ("Ian",4), ("Neal",6), ("Wally",3), ("Emma",4)]),
                ("The Green Mile","Frank Darabont",1999,[("Sam",3), ("Zoe",4), ("Dave",8), ("Wally",5), ("Jo",5)]),
                ("True Lies","James Cameron",1994,[("Dave",3), ("Kevin",4), ("Jo",0)]),
                ("Minority Report","Steven Spielberg",2002,[("Dave",5), ("Garry",6), ("Megan",2), ("Sam",7), ("Wally",8)]),
                ("The Wolf of Wall Street","Martin Scorsese",2013,[("Dave",6), ("Garry",6), ("Megan",0), ("Sam",4)]),
                ("War Horse","Steven Spielberg",2011,[("Dave",6), ("Garry",6), ("Megan",3), ("Sam",7), ("Wally",8), ("Zoe",8)]),
                ("Lincoln","Steven Spielberg",2012,[("Ian",3), ("Sam",7), ("Wally",3), ("Zoe",4), ("Liz",7), ("Megan",4)]),
                ("Vertigo","Alfred Hitchcock",1958,[("Bill",7), ("Emma",5), ("Zoe",9), ("Olga",6), ("Tim",10)]),
                ("The Terminal","Steven Spielberg",2004,[("Olga",3), ("Heidi",8), ("Bill",2), ("Sam",6), ("Garry",8)]),
                ("Jaws","Steven Spielberg",1975,[("Fred",3), ("Garry",0), ("Jo",3), ("Neal",9), ("Emma",7)]),
                ("Hugo","Martin Scorsese",2011,[("Sam",4), ("Wally",3), ("Zoe",4), ("Liz",7)])]     

averageFilmRating :: [(String,Int)] -> Float
averageFilmRating ratings
     = (fromIntegral(sum $ map snd ratings)) / (fromIntegral(length ratings))

--Displays films by year
filmsByYear :: Int -> [Film]
filmsByYear year
     = filter(\(_,_,yr,_) -> yr >= year) testDatabase    


当使用Haskell列表时,几乎总是有一个函数来完成前奏曲提供的任务。养成一个能自己驾驶胡瓜的习惯是很好的。例如,您想要的函数被称为
sortBy
:当使用Haskell列表时,几乎总是有一个函数来完成Prelude提供的任务。养成一个能自己驾驶胡瓜的习惯是很好的。例如,您想要的函数被称为
sortBy
:当使用Haskell列表时,几乎总是有一个函数来完成Prelude提供的任务。养成一个能自己驾驶胡瓜的习惯是很好的。例如,您想要的函数被称为
sortBy
:当使用Haskell列表时,几乎总是有一个函数来完成Prelude提供的任务。养成一个能自己驾驶胡瓜的习惯是很好的。例如,您想要的函数被称为
sortBy
:似乎在以下方面有错误:不在范围内:
关于“也许您的意思是
或”(从Data.List导入)请您也解释一下这是如何工作的。它在Data.Function中。谢谢。输入年份后,我如何运行它来显示排序?编辑:将
compare on
替换为
compare on
compare from Data.Ord
filmsByYear year=sortFilms$filter(\(\,\uu,yr,\uu)->yr>=year)testDatabase
似乎在以下方面出错:不在范围内:
关于“可能您的意思是
或”(从Data.List导入)请您也解释一下这是如何工作的。它在Data.Function中。谢谢。输入年份后,我如何运行它来显示排序?编辑:将
compare on
替换为
compare on
compare from Data.Ord
filmsByYear year=sortFilms$filter(\(\,\uu,yr,\uu)->yr>=year)testDatabase
似乎在以下方面出错:不在范围内:
关于“可能您的意思是
或”(从Data.List导入)请您也解释一下这是如何工作的。它在Data.Function中。谢谢。输入年份后,我如何运行它来显示排序?编辑:将
compare on
替换为
compare on
compare from Data.Ord
filmsByYear year=sortFilms$filter(\(\,\uu,yr,\uu)->yr>=year)testDatabase
似乎在以下方面出错:不在范围内:
关于“可能您的意思是
或”(从Data.List导入)请您也解释一下它在Data.Function中是如何工作的。谢谢。输入年份后,我如何运行它来显示排序?编辑:将
compare on
替换为
compare on
,比较数据中的

import Data.List
import Data.Ord

sortFilms :: [Film] -> [Film]
sortFilms = sortBy $ flip $ comparing averageFilmRating'
  where
    averageFilmRating' (_,_,_,rs) = averageFilmRating rs