Cuantificadores sobre listas
Definir la función
verificaP :: (a -> Bool) -> [[a]] -> Bool
tal que (verificaP p xs) se verifica si cada elemento de la lista xss contiene algún elemento que cumple el predicado p. Por ejemplo,
verificaP odd [[1,3,4,2], [4,5], [9]] == True verificaP odd [[1,3,4,2], [4,8], [9]] == False
Nota: Se puede definir por comprensión, recursión y plegado.
Soluciones
-- 1ª definición (por comprensión): verificaP :: (a -> Bool) -> [[a]] -> Bool verificaP p xss = and [any p xs | xs <- xss] -- 2ª definición (por recursión): verificaP2 :: (a -> Bool) -> [[a]] -> Bool verificaP2 p [] = True verificaP2 p (xs:xss) = any p xs && verificaP2 p xss -- 3ª definición (por plegado): verificaP3 :: (a -> Bool) -> [[a]] -> Bool verificaP3 p = foldr ((&&) . any p) True -- 4ª definición (con cuantificadores) verificaP4 :: (a -> Bool) -> [[a]] -> Bool verificaP4 p = all (any p) -- 5ª definición (con cuantificadores y composición) verificaP5 :: (a -> Bool) -> [[a]] -> Bool verificaP5 = all . any