Mezcla de infinitas listas infinitas
Definir la función
1 |
mezclaTodas :: Ord a => [[a]] -> [a] |
tal que (mezclaTodas xss) es la mezcla ordenada de xss, donde tanto xss como sus elementos son listas infinitas ordenadas. Por ejemplo,
1 2 3 4 |
ghci> take 10 (mezclaTodas [[n,2*n..] | n <- [2..]]) [2,3,4,5,6,7,8,9,10,11] ghci> take 10 (mezclaTodas [[n,2*n..] | n <- [2,9..]]) [2,4,6,8,9,10,12,14,16,18] |
Soluciones
1 2 3 4 5 6 7 8 |
mezclaTodas :: Ord a => [[a]] -> [a] mezclaTodas = foldr1 xmezcla where xmezcla (x:xs) ys = x : mezcla xs ys mezcla :: Ord a => [a] -> [a] -> [a] mezcla (x:xs) (y:ys) | x < y = x : mezcla xs (y:ys) | x == y = x : mezcla xs ys | x > y = y : mezcla (x:xs) ys |
3 Comentarios