Números en una cadena
Definir la función
1 |
numeros :: String -> [Int] |
tal que (numeros cs) es la lista de los números enteros no negativos de la cadena cs. Por ejemplo,
1 2 3 4 5 6 |
λ> numeros "Esta cadena tiene 3 numeros: el 16 y el 2019 solamente." [3,16,2019] λ> numeros "Esta cadena tiene 3 numeros naturales: -2 más 2 es 0" [3,2,0] λ> numeros "Esta cadena tiene 1 numero natural: 2.5 no es entereo" [1] |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import Data.Char (isDigit) -- 1ª definición -- ============= numeros :: String -> [Int] numeros cs = map read (filter esNumero (words cs)) -- (esNumero cs) se verifica si la cadena no vacía cs representa -- un número entero. Por ejemplo, -- esNumero "2019" == True -- esNumero "20.9" == False -- esNumero "201a" == False esNumero :: String -> Bool esNumero = all (`elem` ['0'..'9']) -- 2ª solución -- =========== numeros2 :: String -> [Int] numeros2 cs = map read (filter (all isDigit) (words cs)) -- 3ª solución -- =========== numeros3 :: String -> [Int] numeros3 = map read . filter (all isDigit) . words |
Pensamiento
Tu profecía, poeta.
— Mañana hablarán los mudos:
el corazón y la piedra.Antonio Machado
Da resultado erróneos. Por ejemplo,
y debería de dar [2,16] como en las otras.