Números superpares
Definir la función
superpar :: Int -> Bool
tal que (superpar n) se verifica si n es un número par tal que todos sus dígitos son pares. Por ejemplo,
superpar 426 == True superpar 456 == False
Soluciones
-- 1ª definición (por recursión) superpar :: Int -> Bool superpar n | n < 10 = even n | otherwise = even n && superpar (n `div` 10) -- 2ª definición (por comprensión): superpar2 :: Int -> Bool superpar2 n = and [even d | d <- digitos n] digitos :: Int -> [Int] digitos n = [read [d] | d <- show n] -- 3ª definición (por recursión sobre los dígitos): superpar3 :: Int -> Bool superpar3 n = sonPares (digitos n) where sonPares [] = True sonPares (d:ds) = even d && sonPares ds -- la función sonPares se puede definir por plegado: superpar3' :: Int -> Bool superpar3' n = sonPares (digitos n) where sonPares ds = foldr ((&&) . even) True ds -- 4ª definición (con all): superpar4 :: Int -> Bool superpar4 n = all even (digitos n) -- 5ª definición (con filter): superpar5 :: Int -> Bool superpar5 n = filter even (digitos n) == digitos n -- 6ª definición (con filter): superpar6 :: Int -> Bool superpar6 n = all (`elem` "02468") (show n)