{"id":344,"date":"2014-06-24T07:00:33","date_gmt":"2014-06-24T05:00:33","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=344"},"modified":"2022-03-26T12:14:12","modified_gmt":"2022-03-26T10:14:12","slug":"entero-positivo-de-la-cadena","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/entero-positivo-de-la-cadena\/","title":{"rendered":"Entero positivo de la cadena"},"content":{"rendered":"<h4>Enunciado<\/h4>\n<pre lang=\"text\">\n-- Definir la funci\u00f3n\n--    enteroPositivo :: String -> Maybe Int\n-- tal que (enteroPositivo cs) es justo el contenido de la cadena cs, si\n-- dicho contenido es un entero positivo, y Nothing en caso contrario. \n-- Por ejemplo, \n--    enteroPositivo \"235\"    ==  Just 235\n--    enteroPositivo \"-235\"   ==  Nothing\n--    enteroPositivo \"23.5\"   ==  Nothing\n--    enteroPositivo \"235 \"   ==  Nothing\n--    enteroPositivo \"cinco\"  ==  Nothing\n--    enteroPositivo \"\"       ==  Nothing\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nenteroPositivo :: String -> Maybe Int\nenteroPositivo \"\"                   = Nothing\nenteroPositivo cs | todosDigitos cs = Just (read cs)\n                  | otherwise       = Nothing\n\n-- (todosDigitos cs) se verifica si todos los elementos de cs son\n-- d\u00edgitos. Por ejemplo,\n--    todosDigitos \"235\"    ==  True\n--    todosDigitos \"-235\"   ==  False\n--    todosDigitos \"23.5\"   ==  False\n--    todosDigitos \"235 \"   ==  False\n--    todosDigitos \"cinco\"  ==  False\n\n-- 1\u00aa definici\u00f3n de todosDigitos (por comprensi\u00f3n):\ntodosDigitos :: String -> Bool\ntodosDigitos cs = and [esDigito c | c <- cs]\n\n-- 2\u00aa definici\u00f3n de todosDigitos (por recursi\u00f3n):\ntodosDigitos2 :: String -> Bool\ntodosDigitos2 []     = True\ntodosDigitos2 (c:cs) = esDigito c && todosDigitos2 cs\n\n-- 3\u00aa definici\u00f3n de todosDigitos (por recursi\u00f3n):\ntodosDigitos3 :: String -> Bool\ntodosDigitos3 = foldr ((&&) . esDigito) True\n\n-- 4\u00aa definici\u00f3n de todosDigitos (con all):\ntodosDigitos4 :: String -> Bool\ntodosDigitos4 = all esDigito\n\n-- (esDigito c) se verifica si el car\u00e1cter c es un d\u00edgito. Por ejemplo,\n--    esDigito '5'  ==  True\n--    esDigito 'a'  ==  False\n\n-- 1\u00aa definici\u00f3n de esDigito:\nesDigito1 :: Char -> Bool\nesDigito1 c = c `elem` \"0123456789\"\n\n-- 2\u00aa definici\u00f3n de esDigito:\nesDigito2 :: Char -> Bool\nesDigito2 c = c `elem` ['0'..'9']\n\n-- 3\u00aa definici\u00f3n de esDigito:\nesDigito3 :: Char -> Bool\nesDigito3 = (`elem` ['0'..'9'])\n\n-- 4\u00aa definici\u00f3n de esDigito:\nesDigito4 :: Char -> Bool\nesDigito4 c = '0' <= c &#038;&#038; c <= '9'\n\n-- 5\u00aa definici\u00f3n de esDigito:\nesDigito5 :: Char -> Bool\nesDigito5 = isDigit\n\n-- Usaremos como definici\u00f3n de esDigito la 5\u00aa:\nesDigito :: Char -> Bool\nesDigito = esDigito5\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Enunciado &#8212; Definir la funci\u00f3n &#8212; enteroPositivo :: String -> Maybe Int &#8212; tal que (enteroPositivo cs) es justo el contenido de la cadena cs, si &#8212; dicho contenido es un entero positivo, y Nothing en caso contrario. &#8212; Por ejemplo, &#8212; enteroPositivo \u00ab235\u00bb == Just 235 &#8212; enteroPositivo \u00ab-235\u00bb == Nothing &#8212; enteroPositivo \u00ab23.5\u00bb&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[4],"tags":[41,100,8,500,26,94,101,11,6],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/344"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=344"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/344\/revisions"}],"predecessor-version":[{"id":681,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/344\/revisions\/681"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}