Elementos más frecuentes
Definir la función
masFrecuentes :: Ord a => Int -> [a] -> [(Int,a)]
tal que (masFrecuentes n xs) es la lista de los pares formados por los elementos de xs que aparecen más veces junto con el número de veces que aparecen. Por ejemplo,
λ> masFrecuentes 2 "trianera" [(2,'r'),(2,'a')] λ> masFrecuentes 2 "interdisciplinariedad" [(5,'i'),(3,'d')] λ> masFrecuentes 3 (show (product [1..10000])) [(5803,'0'),(3416,'2'),(3341,'4')]
Soluciones
import Data.List (group, sort) masFrecuentes :: Ord a => Int -> [a] -> [(Int,a)] masFrecuentes n = take n . reverse . sort . cuenta . group . sort where cuenta xss = [(length xs,head xs) | xs <- xss]