{"id":2331,"date":"2012-11-20T19:39:51","date_gmt":"2012-11-20T19:39:51","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=2331"},"modified":"2013-03-08T05:47:38","modified_gmt":"2013-03-08T05:47:38","slug":"i1m2012-definiciones-por-recursion-3","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2012-definiciones-por-recursion-3\/","title":{"rendered":"I1M2012: Definiciones por recursi\u00f3n (3)"},"content":{"rendered":"<p>En la primera parte de la clase de hoy de <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-12\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> hemos concluido el estudio de las definiciones por recursi\u00f3n en Haskell. Concretamente, hemos visto ejemplos de recursi\u00f3n recursi\u00f3n m\u00faltiple y de recursi\u00f3n mutua. Tambi\u00e9n hemos comentado el m\u00e9todo para construir funciones recursivas.<\/p>\n<p>En la segunda parte hemos comentado la soluci\u00f3n del problema 4 (\u00faltimo d\u00edgito del producto de n\u00fameros de Fermat). <\/p>\n<p>\nLas transparencias usadas en la clase son las comprendidas entre las p\u00e1ginas 14 y 24 del <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-12\/temas\/tema-6t.pdf\">tema 6<\/a>:<br \/>\n<!--more--><br \/>\n<div class=\"jetpack-video-wrapper\"><iframe src='https:\/\/www.slideshare.net\/slideshow\/embed_code\/5667945' width='1290' height='1057' sandbox=\"allow-popups allow-scripts allow-same-origin allow-presentation\" allowfullscreen webkitallowfullscreen mozallowfullscreen><\/iframe><\/div><\/p>\n<p>El c\u00f3digo correspondiente es<\/p>\n<pre lang=\"haskell\">\r\n-- ---------------------------------------------------------------------\r\n-- Recursi\u00f3n m\u00faltiple                                                 --\r\n-- ---------------------------------------------------------------------\r\n\r\n-- (ordena xs) es la lista obtenida ordenando xs meciante el algoritmo\r\n-- de ordenaci\u00f3n r\u00e1pida. Por ejemplo,\r\n--    ordena [2,5,4,7]  ==  [2,4,5,7]\r\nordena :: (Ord a) => [a] -> [a]\r\nordena [] = []\r\nordena (x:xs) = \r\n    (ordena menores) ++ [x] ++ (ordena mayores)\r\n    where menores = [a | a <- xs, a <= x]\r\n          mayores = [b | b <- xs, b > x]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Recursi\u00f3n mutua                                                    --\r\n-- ---------------------------------------------------------------------\r\n\r\n-- (par x) se verifica si x es par e (impar x) se verifica si x es\r\n-- impar. Por ejemplo,\r\n--    par 3    ==  False\r\n--    impar 3  ==  True\r\npar :: Int -> Bool\r\npar 0     = True\r\npar (n+1) = impar n\r\n\r\nimpar :: Int -> Bool\r\nimpar 0      = False\r\nimpar (n+1)  = par n\r\n\r\n-- (pares xs) son los elementos de xs que ocupan posiciones pares e\r\n-- (impares xs) son los elementos de xs que ocupan posiciones\r\n-- impares. Por ejemplo,\r\n--    pares [1,3,5,7]  ==  [1,5]  \r\npares :: [a] -> [a]\r\npares []     = []\r\npares (x:xs) = x : impares xs\r\n\r\nimpares :: [a] -> [a]\r\nimpares []     = []\r\nimpares (_:xs) = pares xs\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Heur\u00edsticas para las definiciones recursivas                       --\r\n-- ---------------------------------------------------------------------\r\n\r\n-- (init xs) es la lista xs sin el \u00faltimo elemento. Por ejemplo,\r\n--    init [3,2,5]  ==  [2,5] \r\ninit :: [a] -> [a]\r\ninit [_]    = []\r\ninit (x:xs) = x : init xs\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la primera parte de la clase de hoy de Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas hemos concluido el estudio de las definiciones por recursi\u00f3n en Haskell. Concretamente, hemos visto ejemplos de recursi\u00f3n recursi\u00f3n m\u00faltiple y de recursi\u00f3n mutua. Tambi\u00e9n hemos comentado el m\u00e9todo para construir funciones recursivas. En la segunda parte hemos comentado&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","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":[1],"tags":[298],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2331"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/comments?post=2331"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2331\/revisions"}],"predecessor-version":[{"id":2745,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2331\/revisions\/2745"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=2331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=2331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=2331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}