Entero positivo de la cadena
Enunciado
1 2 3 4 5 6 7 8 9 10 11 |
-- Definir la función -- enteroPositivo :: String -> Maybe Int -- tal que (enteroPositivo cs) es justo el contenido de la cadena cs, si -- dicho contenido es un entero positivo, y Nothing en caso contrario. -- Por ejemplo, -- enteroPositivo "235" == Just 235 -- enteroPositivo "-235" == Nothing -- enteroPositivo "23.5" == Nothing -- enteroPositivo "235 " == Nothing -- enteroPositivo "cinco" == Nothing -- enteroPositivo "" == Nothing |
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
enteroPositivo :: String -> Maybe Int enteroPositivo "" = Nothing enteroPositivo cs | todosDigitos cs = Just (read cs) | otherwise = Nothing -- (todosDigitos cs) se verifica si todos los elementos de cs son -- dígitos. Por ejemplo, -- todosDigitos "235" == True -- todosDigitos "-235" == False -- todosDigitos "23.5" == False -- todosDigitos "235 " == False -- todosDigitos "cinco" == False -- 1ª definición de todosDigitos (por comprensión): todosDigitos :: String -> Bool todosDigitos cs = and [esDigito c | c <- cs] -- 2ª definición de todosDigitos (por recursión): todosDigitos2 :: String -> Bool todosDigitos2 [] = True todosDigitos2 (c:cs) = esDigito c && todosDigitos2 cs -- 3ª definición de todosDigitos (por recursión): todosDigitos3 :: String -> Bool todosDigitos3 = foldr ((&&) . esDigito) True -- 4ª definición de todosDigitos (con all): todosDigitos4 :: String -> Bool todosDigitos4 = all esDigito -- (esDigito c) se verifica si el carácter c es un dígito. Por ejemplo, -- esDigito '5' == True -- esDigito 'a' == False -- 1ª definición de esDigito: esDigito1 :: Char -> Bool esDigito1 c = c `elem` "0123456789" -- 2ª definición de esDigito: esDigito2 :: Char -> Bool esDigito2 c = c `elem` ['0'..'9'] -- 3ª definición de esDigito: esDigito3 :: Char -> Bool esDigito3 = (`elem` ['0'..'9']) -- 4ª definición de esDigito: esDigito4 :: Char -> Bool esDigito4 c = '0' <= c && c <= '9' -- 5ª definición de esDigito: esDigito5 :: Char -> Bool esDigito5 = isDigit -- Usaremos como definición de esDigito la 5ª: esDigito :: Char -> Bool esDigito = esDigito5 |
2 Comentarios