Definir la función
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 |
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) |
-- 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)
Se puede imprimir o compartir con
Por recursión