Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/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
在Haskell中按函数结果对列表进行排序_Haskell - Fatal编程技术网

在Haskell中按函数结果对列表进行排序

在Haskell中按函数结果对列表进行排序,haskell,Haskell,我试图使用sortBy和compare对列表进行排序,但在比较表达式方面遇到了问题。我需要它根据filmRating函数返回的平均值对列表进行排序 formattedByYear :: Int -> String formattedByYear year = concatMap formatString $ sortBy (compare filmRating) $ filmsByYear year filmRating :: Film -> Float filmRating (F

我试图使用
sortBy
compare
对列表进行排序,但在比较表达式方面遇到了问题。我需要它根据filmRating函数返回的平均值对列表进行排序

formattedByYear :: Int -> String
formattedByYear year = concatMap formatString $ sortBy (compare filmRating) $ filmsByYear year

filmRating :: Film -> Float
filmRating (Film _ _ _ ratings)
      | ratings == [] = 0.0
      | otherwise = average (map snd ratings)

您需要的函数是
Data.Ord.comparing

Prelude> :t Data.Ord.comparing
Data.Ord.comparing :: Ord a => (b -> a) -> b -> b -> Ordering

您需要的函数是
Data.Ord.comparing

Prelude> :t Data.Ord.comparing
Data.Ord.comparing :: Ord a => (b -> a) -> b -> b -> Ordering

formattedByYear=concatMap FormattString$sortBy(比较电影评级)$filmsByYear给了我同样的结果。知道这个结果会很有帮助。导演:“Ridely Scott”电影名称:“测试”年份:2012评级:1.50导演:“测试1”电影名称:“测试1”年份:2012评级:4.50应该按评级排序。它是。当然是上升。如果你想先获得更高的收视率,
sortBy(flip$comparing filmRating)
.formattedByYear=concatMap FormattString$sortBy(comparing filmRating)$filmsByYear year year year year给了我同样的结果。知道结果会很有帮助。导演:“里德利·斯科特”电影名称:“测试”年份:2012年收视率:1.50导演:“测试1”电影名称:“测试1”年份:2012年收视率:4.50应该按收视率订购。它是。当然是上升。如果你想先获得更高的收视率,
sortBy(flip$comparing filmRating)