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
List Haskell数据类型排序列表_List_Sorting_Haskell_Types - Fatal编程技术网

List Haskell数据类型排序列表

List Haskell数据类型排序列表,list,sorting,haskell,types,List,Sorting,Haskell,Types,我得到了一个名为Student的自定义数据类型,它有两个科目的分数。我创建了一个名为average的函数,它计算两个变量的平均值。一切正常 我的问题是,我怎样才能根据学生的平均水平对学生名单进行排序 data Student = Student {studentName :: String, subject1 :: Double, subject2 :: Double} deriving (Show) average :: Student -> Double

我得到了一个名为Student的自定义数据类型,它有两个科目的分数。我创建了一个名为average的函数,它计算两个变量的平均值。一切正常

我的问题是,我怎样才能根据学生的平均水平对学生名单进行排序

data Student = Student
    {studentName :: String,
     subject1 :: Double,
     subject2 :: Double} deriving (Show)

average :: Student -> Double
average (Student _ sub1 sub2) = (sub1 + sub2) / 2

students :: [Student]
students = [Student "Dave"  50.0  40.0,
            Student "Joe"   65.0  90.0,
            Student "Ann"   75.0  82.0]
另外,我是Haskell的初学者,不知道它是否有 内置的平均值函数,但如果我能以类似的方式对列表排序,我会更喜欢 不使用内置平均函数(如果有)的方式如下 用于不同类型功能的小型测试溶液 而是平均水平

import Data.Function (on)
import Data.List (sortBy)

studentsSortedByAverage = sortBy (compare `on` average) students
请注意,这些是上的
周围的反勾号,而不是单引号

以下是和的文档链接


如果您使用的是未随
Data.Function
附带的旧编译器,则以下是
的定义:

on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
(.*.) `on` f = \x y -> f x .*. f y

嗨,戴夫,谢谢。当我尝试任何线索来解释为什么以及如果是,如何更正时,我收到一个错误,说“找不到导入的模块数据.函数”。感谢你help@Ranisha如果您使用的是GHC的中间最新版本,它应该附带Data.Function,但我已经对我的答案进行了编辑,在
中包含了
的定义。