-- Definir el predicado
-- todasTienenPar :: [[Int]] -> Bool
-- tal que (todasTienenPar xss) se verifica si cada elemento de
-- la lista de listas xss contiene algún número par. Por ejemplo,
-- todasTienenPar [[1,2],[3,4,5],[8]] == True
-- todasTienenPar [[1,2],[3,5]] == False |
-- Definir el predicado
-- todasTienenPar :: [[Int]] -> Bool
-- tal que (todasTienenPar xss) se verifica si cada elemento de
-- la lista de listas xss contiene algún número par. Por ejemplo,
-- todasTienenPar [[1,2],[3,4,5],[8]] == True
-- todasTienenPar [[1,2],[3,5]] == False
Soluciones
-- 1ª definición (por comprensión)
-- ===============================
todasTienenPar :: [[Int]] -> Bool
todasTienenPar xss = and [or [even x | x <- xs] | xs <- xss]
-- 2ª definición (por recursión)
-- =============================
todasTienenPar2 :: [[Int]] -> Bool
todasTienenPar2 [] = True
todasTienenPar2 (xs:xss) = tienePar xs && todasTienenPar2 xss
-- (tienePar xs) se verifica si xs contiene algún número par.
tienePar :: [Int] -> Bool
tienePar [] = False
tienePar (x:xs) = even x || tienePar xs
-- 3ª definición (por plegado)
-- ===========================
todasTienenPar3 :: [[Int]] -> Bool
todasTienenPar3 = foldr ((&&) . tienePar3) True
-- (tienePar3 xs) se verifica si xs contiene algún número par.
tienePar3 :: [Int] -> Bool
tienePar3 = foldr ((||) . even) False
-- 4ª definición (con cuantificadores)
-- ===================================
todasTienenPar4 :: [[Int]] -> Bool
todasTienenPar4 = all (any even) |
-- 1ª definición (por comprensión)
-- ===============================
todasTienenPar :: [[Int]] -> Bool
todasTienenPar xss = and [or [even x | x <- xs] | xs <- xss]
-- 2ª definición (por recursión)
-- =============================
todasTienenPar2 :: [[Int]] -> Bool
todasTienenPar2 [] = True
todasTienenPar2 (xs:xss) = tienePar xs && todasTienenPar2 xss
-- (tienePar xs) se verifica si xs contiene algún número par.
tienePar :: [Int] -> Bool
tienePar [] = False
tienePar (x:xs) = even x || tienePar xs
-- 3ª definición (por plegado)
-- ===========================
todasTienenPar3 :: [[Int]] -> Bool
todasTienenPar3 = foldr ((&&) . tienePar3) True
-- (tienePar3 xs) se verifica si xs contiene algún número par.
tienePar3 :: [Int] -> Bool
tienePar3 = foldr ((||) . even) False
-- 4ª definición (con cuantificadores)
-- ===================================
todasTienenPar4 :: [[Int]] -> Bool
todasTienenPar4 = all (any even)
Se puede imprimir o compartir con
Una solución de “Todas tienen par”