Cuantificadores sobre listas
Enunciado
1 2 3 4 5 6 |
-- 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 |
Soluciones
[schedule expon=’2014-11-28′ expat=»06:00″]
- Las soluciones se pueden escribir en los comentarios hasta el 28 de noviembre.
- El código se debe escribir entre una línea con <pre lang=»haskell»> y otra con </pre>
[/schedule]
[schedule on=’2014-11-28′ at=»06:00″]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
-- 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 |
[/schedule]
3 Comentarios