Ran*_*ake 3 sorting haskell types list
我有一个名为Student的自定义数据类型,它有2个主题的标记.我创建了一个名为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]
Run Code Online (Sandbox Code Playgroud)
PS我是Haskell的初学者,不知道它是否具有内置的平均功能但是我更喜欢如果我能以类似的方式对我的列表进行排序而不使用内置的平均功能(如果它在那里)作为这个小的测试解决方案使用用不同类型的函数代替平均值.
import Data.Function (on)
import Data.List (sortBy)
studentsSortedByAverage = sortBy (compare `on` average) students
Run Code Online (Sandbox Code Playgroud)
请注意,这些是反引号on
,而不是单引号.
如果您使用的是未附带的旧编译器,则以下Data.Function
是以下定义on
:
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
(.*.) `on` f = \x y -> f x .*. f y
Run Code Online (Sandbox Code Playgroud)