Listas de igual longitud
Definir la función
mismaLongitud :: [[a]] -> Bool
tal que (mismaLongitud xss) se verifica si todas las listas de la lista de listas xss tienen la misma longitud. Por ejemplo,
mismaLongitud [[1,2],[6,4],[0,0],[7,4]] == True mismaLongitud [[1,2],[6,4,5],[0,0]] == False
Soluciones
import Data.List (nub) -- 1ª solución: mismaLongitud1 :: [[a]] -> Bool mismaLongitud1 [] = True mismaLongitud1 (xs:xss) = and [length ys == n | ys <- xss] where n = length xs -- 2ª solución: mismaLongitud2 :: [[a]] -> Bool mismaLongitud2 xss = and [length xs == length ys | (xs,ys) <- zip xss (tail xss)] -- 3ª solución: mismaLongitud3 :: [[a]] -> Bool mismaLongitud3 (xs:ys:xss) = length xs == length ys && mismaLongitud3 (ys:xss) mismaLongitud3 _ = True -- 4ª solución mismaLongitud4 :: [[a]] -> Bool mismaLongitud4 [] = True mismaLongitud4 (xs:xss) = all (\ys -> length ys == n) xss where n = length xs -- 5ª solución mismaLongitud5 :: [[a]] -> Bool mismaLongitud5 xss = length (nub [length xs | xs <- xss]) == 1 -- 6ª solución mismaLongitud6 :: [[a]] -> Bool mismaLongitud6 = null . drop 1 . nub . map length -- Comparación de eficiencia -- λ> mismaLongitud1 (replicate 20000 (replicate 20000 5)) -- True -- (5.05 secs, 0 bytes) -- λ> mismaLongitud2 (replicate 20000 (replicate 20000 5)) -- True -- (9.98 secs, 0 bytes) -- λ> mismaLongitud3 (replicate 20000 (replicate 20000 5)) -- True -- (10.17 secs, 0 bytes) -- λ> mismaLongitud4 (replicate 20000 (replicate 20000 5)) -- True -- (5.18 secs, 0 bytes) -- λ> mismaLongitud5 (replicate 20000 (replicate 20000 5)) -- True -- (4.30 secs, 0 bytes) -- λ> mismaLongitud6 (replicate 20000 (replicate 20000 5)) -- True -- (4.19 secs, 0 bytes)