{"id":2326,"date":"2012-11-19T17:25:55","date_gmt":"2012-11-19T17:25:55","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=2326"},"modified":"2013-03-08T05:47:38","modified_gmt":"2013-03-08T05:47:38","slug":"i1m2012-definiciones-por-recursion-2","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2012-definiciones-por-recursion-2\/","title":{"rendered":"I1M2012: Definiciones por recursi\u00f3n (2)"},"content":{"rendered":"<p>En 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 continuado el estudio de las definiciones por recursi\u00f3n en Haskell. Concretamente, hemos visto ejemplos de recursi\u00f3n con guardas, recursi\u00f3n sobre varios argumentos y recursi\u00f3n m\u00faltiple.<\/p>\n<p>\nLas transparencias usadas en la clase son las comprendidas entre las p\u00e1ginas 10 y 13 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-- (inserta e xs) inserta el elemento e en la lista xs delante del\r\n-- primer elemento de xs mayor o igual que e. Por ejemplo,\r\n--    inserta 5 [2,4,7,3,6,8,10] == [2,4,5,7,3,6,8,10]  \r\ninserta :: Ord a => a -> [a] -> [a]\r\ninserta e []                  = [e]\r\ninserta e (x:xs) | e <= x     = e : (x:xs) \r\n                 | otherwise  = x : inserta e xs    \r\n\r\n-- (ordena_por_insercion xs) es la lista xs ordenada mediante inserci\u00f3n,\r\n-- Por ejemplo, \r\n--    ordena_por_insercion [2,4,3,6,3] == [2,3,3,4,6]  \r\nordena_por_insercion :: Ord a => [a] -> [a]\r\nordena_por_insercion []     = []\r\nordena_por_insercion (x:xs) = \r\n    inserta x (ordena_por_insercion xs)   \r\n\r\n-- ---------------------------------------------------------------------\r\n-- Recursi\u00f3n sobre varios argumentos                                  --\r\n-- ---------------------------------------------------------------------\r\n\r\n-- (zip xs ys) es la lista de los pares de los elementos de xs e ys en\r\n-- la misma posici\u00f3n. Por ejemplo,\r\n--    zip [1,3,5] [2,4,6,8]  ==  [(1,2),(3,4),(5,6)]\r\nzip :: [a] -> [b] -> [(a, b)]\r\nzip []     _      = []\r\nzip _      []     = []\r\nzip (x:xs) (y:ys) = (x,y) : zip xs ys\r\n\r\n-- (drop n xs) es la lista obtenida eliminando los n primeros elementos\r\n-- de xs. Por ejemplo,\r\n--    drop 2 [5,7,9,4] == [9,4]\r\n--    drop 5 [1,4]     ==  [] \r\ndrop :: Int -> [a] -> [a]\r\ndrop 0 xs         = xs\r\ndrop (n+1) []     = []\r\ndrop (n+1) (x:xs) = drop n xs\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Recursi\u00f3n m\u00faltiple                                                 --\r\n-- ---------------------------------------------------------------------\r\n\r\n-- (fibonacci n) es el n--\u00e9simo t\u00e9rmino de la sucesi\u00f3n de Fibonacci. Por\r\n-- ejemplo, \r\n--    fibonacci 8  ==  21  \r\nfibonacci :: Int -> Int\r\nfibonacci 0     = 0\r\nfibonacci 1     = 1\r\nfibonacci (n+2) = fibonacci n + fibonacci (n+1)\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la clase de hoy de Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas hemos continuado el estudio de las definiciones por recursi\u00f3n en Haskell. Concretamente, hemos visto ejemplos de recursi\u00f3n con guardas, recursi\u00f3n sobre varios argumentos y recursi\u00f3n m\u00faltiple. Las transparencias usadas en la clase son las comprendidas entre las p\u00e1ginas 10 y 13 del&#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\/2326"}],"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=2326"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2326\/revisions"}],"predecessor-version":[{"id":2747,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2326\/revisions\/2747"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=2326"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=2326"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=2326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}