Números en una cadena
Definir la función
numeros :: String -> [Int]
tal que (numeros cs) es la lista de los números enteros de la cadena cs. Por ejemplo,
λ> numeros "Esta cadena tiene 3 numeros: el 16 y el 2019 solamente." [3,16,2019]
Soluciones
import Data.Char (isDigit) import Data.List (tails, unfoldr) import Data.Maybe (listToMaybe) -- 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 -- 4ª solución -- =========== numeros4 :: String -> [Int] numeros4 = unfoldr (listToMaybe . concatMap reads . tails)