List Haskell数据类型排序列表
我得到了一个名为Student的自定义数据类型,它有两个科目的分数。我创建了一个名为average的函数,它计算两个变量的平均值。一切正常 我的问题是,我怎样才能根据学生的平均水平对学生名单进行排序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
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,但我已经对我的答案进行了编辑,在
中包含了的定义。