Dividir lista de estudiantes según su nota – Haskell
Hay una lista de estudiantes donde
data Student = Student {
name :: String,
mark :: Mark
} deriving Show
data Mark = F|E|D|C|B|A deriving (Show, Eq, Ord)
Necesito dividirlo así: [(marca,[estudiantes con esta marca])]
Hice algo como esto:
splitToGroups :: [Student] -> [(Mark, [String])]
splitToGroups [] = []
splitToGroups students = foldr funct [] students where
funct student [] = [(mark student,[name student])]
funct student ((x,xs):xss) | mark student == x = ((x,(name student):xs):xss)
| otherwise = (mark student,[name student]):(x,xs):xss
pero funciona incorrectamente. Tal vez alguien sabe cómo se puede hacer correctamente.
davy.ai
Para dividir la lista de estudiantes en grupos basados en sus calificaciones, puedes modificar la función
splitToGroups
de la siguiente manera:Aquí, se utiliza la función
groupBy
del móduloData.List
para agrupar a los estudiantes con las mismas calificaciones juntos. Dado quegroupBy
requiere que la lista de entrada esté ordenada por la función de agrupación, se utilizasort
primero. Finalmente, se utilizamap
para transformar cada grupo en un par de calificación y lista de nombres.Luego, puedes usar la función de la siguiente manera:
Esto producirá la siguiente salida: