{"id":1695,"date":"2011-11-18T16:35:53","date_gmt":"2011-11-18T16:35:53","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=1695"},"modified":"2013-03-08T05:48:59","modified_gmt":"2013-03-08T05:48:59","slug":"i1m2011-ejercicios-de-definiciones-por-recursion-en-haskell-2","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2011-ejercicios-de-definiciones-por-recursion-en-haskell-2\/","title":{"rendered":"I1M2011: Ejercicios de definiciones por recursi\u00f3n en Haskell (2)"},"content":{"rendered":"<p>En la clase de hoy de <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-11\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> hemos continuado los comentarios sobre las soluciones de los ejercicios de la <a href=\"https:\/\/www.glc.us.es\/~jalonso\/ejerciciosI1M2011G1\/images\/0\/0a\/Rel_6.hs\">6\u00aa relaci\u00f3n<\/a>, que tratan sobre definiciones por recursi\u00f3n, que comenzamos en la <a href=\"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2011-ejercicios-de-definiciones-por-recursion-en-haskell\/\">clase anterior<\/a>.<\/p>\n<p>Los ejercicios, y sus soluciones, se muestran a continuaci\u00f3n:<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 13. Definir por recursi\u00f3n la funci\u00f3n\r\n--    take' :: Int -> [a] -> [a]\r\n-- tal que (take' n xs) es la lista de los n primeros elementos de\r\n-- xs. Por ejemplo, \r\n--    take' 3 [4..12]  =>  [4,5,6]\r\n-- ---------------------------------------------------------------------\r\n\r\ntake' :: Int -> [a] -> [a]\r\ntake' 0 _          = []\r\ntake' (n+1) []     = []\r\ntake' (n+1) (x:xs) = x : take' n xs\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 14. Definir por recursi\u00f3n la funci\u00f3n\r\n--    last' :: [a] -> a\r\n-- tal que (last xs) es el \u00faltimo elemento de xs. Por ejemplo,\r\n--    last' [2,3,5]  =>  5\r\n-- ---------------------------------------------------------------------\r\n\r\nlast' :: [a] -> a\r\nlast' [x]    = x\r\nlast' (_:xs) = last' xs\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 15. Dados dos n\u00fameros naturales, a y b, es posible\r\n-- calcular su m\u00e1ximo com\u00fan divisor mediante el Algoritmo de\r\n-- Euclides. Este algoritmo se puede resumir en la siguiente f\u00f3rmula:\r\n--    mcd(a,b) = a,                   si b = 0\r\n--             = mcd (b, a m\u00f3dulo b), si b > 0\r\n-- \r\n-- Definir la funci\u00f3n \r\n--    mcd :: Integer -> Integer -> Integer\r\n-- tal que (mcd a b) es el m\u00e1ximo com\u00fan divisor de a y b calculado\r\n-- mediante el algoritmo de Euclides. Por ejemplo,\r\n--    mcd 30 45  ==  15\r\n-- ---------------------------------------------------------------------\r\n\r\nmcd :: Integer -> Integer -> Integer\r\nmcd a 0 = a\r\nmcd a b = mcd b (a `mod` b)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 16. (Problema 5 del proyecto Euler) El problema se encuentra\r\n-- en http:\/\/goo.gl\/L5bb y consiste en calcular el menor n\u00famero\r\n-- divisible por los n\u00fameros del 1 al 20. Lo resolveremos mediante los\r\n-- distintos apartados de este ejercicio. \r\n-- ---------------------------------------------------------------------\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 16.1. Definir por recursi\u00f3n la funci\u00f3n\r\n--    menorDivisible :: Integer -> Integer -> Integer\r\n-- tal que (menorDivisible a b) es el menor n\u00famero divisible por los\r\n-- n\u00fameros del a al b. Por ejemplo,\r\n--    menorDivisible 2 5  ==  60\r\n-- Indicaci\u00f3n: Usar la funci\u00f3n lcm tal que (lcm x y) es el m\u00ednimo com\u00fan\r\n-- m\u00faltiplo de x e y.\r\n-- ---------------------------------------------------------------------\r\n\r\nmenorDivisible :: Integer -> Integer -> Integer\r\nmenorDivisible  a b  \r\n    | a == b    = a\r\n    | otherwise = lcm a (menorDivisible (a+1) b)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 16.2. Definir la constante\r\n--    euler5 :: Integer\r\n-- tal que euler5 es el menor n\u00famero divisible por los n\u00fameros del 1 al\r\n-- 20 y calcular su valor.\r\n-- ---------------------------------------------------------------------\r\n\r\neuler5 :: Integer\r\neuler5 = menorDivisible 1 20\r\n\r\n-- El c\u00e1lculo es\r\n--    ghci> euler5\r\n--    232792560\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 los comentarios sobre las soluciones de los ejercicios de la 6\u00aa relaci\u00f3n, que tratan sobre definiciones por recursi\u00f3n, que comenzamos en la clase anterior. Los ejercicios, y sus soluciones, se muestran a continuaci\u00f3n:<\/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":[],"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\/1695"}],"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=1695"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/1695\/revisions"}],"predecessor-version":[{"id":2909,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/1695\/revisions\/2909"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=1695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=1695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=1695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}