{"id":2243,"date":"2012-10-22T18:25:02","date_gmt":"2012-10-22T18:25:02","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/?p=2243"},"modified":"2013-03-08T05:44:48","modified_gmt":"2013-03-08T05:44:48","slug":"i1m2012-ejercicios-de-definiciones-por-comprension-1","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2012-ejercicios-de-definiciones-por-comprension-1\/","title":{"rendered":"I1M2012: Ejercicios de definiciones por comprensi\u00f3n (1)"},"content":{"rendered":"<p>En la clase de hoy del curso <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-12\">Inform\u00e1tica (de 1\u00ba de Grado en Matem\u00e1ticas)<\/a> se han comentado las soluciones de los 3 primeros ejercicios de la <a href=\"https:\/\/www.glc.us.es\/~jalonso\/ejerciciosI1M2012G2\/images\/a\/a9\/Rel_4.hs\">4\u00aa relaci\u00f3n<\/a> sobre definiciones por comprensi\u00f3n.<\/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-- Introducci\u00f3n                                                       --\r\n-- ---------------------------------------------------------------------\r\n\r\n-- En esta relaci\u00f3n se presentan ejercicios con definiciones por\r\n-- comprensi\u00f3n correspondientes al tema 5 cuyas transparencias se \r\n-- encuentran en  \r\n--    http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-12\/temas\/tema-5.pdf\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 1. Definir, por comprensi\u00f3n, la funci\u00f3n\r\n--    sumaDeCuadrados :: Integer -> Integer\r\n-- tal que (sumaDeCuadrados n) es la suma de los cuadrados de los\r\n-- primeros n n\u00fameros; es decir, 1^2 + 2^2 + ... + n^2. Por ejemplo,\r\n--    sumaDeCuadrados 3    ==  14\r\n--    sumaDeCuadrados 100  ==  338350\r\n-- ---------------------------------------------------------------------\r\n\r\nsumaDeCuadrados :: Integer -> Integer\r\nsumaDeCuadrados n = sum [x^2 | x <- [1..n]]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 2. Definir por comprensi\u00f3n la funci\u00f3n\r\n--    replica :: Int -> a -> [a]\r\n-- tal que (replica n x) es la lista formada por n copias del elemento\r\n-- x. Por ejemplo, \r\n--    replica 3 True  ==  [True, True, True]\r\n-- Nota: La funci\u00f3n replica es equivalente a la predefinida replicate.\r\n-- ---------------------------------------------------------------------\r\n\r\nreplica :: Int -> a -> [a]\r\nreplica n x = [x | _ <- [1..n]]\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3.1. Definir la funci\u00f3n suma tal (suma n) es la suma de los\r\n-- n primeros n\u00fameros. Por ejemplo,\r\n--    suma 3  ==  6\r\n-- ---------------------------------------------------------------------\r\n\r\nsuma n = sum [1..n]\r\n\r\n-- Otra definici\u00f3n m\u00e1s eficiente es\r\nsuma2 n = (1+n)*n `div` 2\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3.2. Los tri\u00e1ngulo aritm\u00e9tico se forman como sigue\r\n--     1\r\n--     2  3\r\n--     4  5  6\r\n--     7  8  9 10\r\n--    11 12 13 14 15\r\n--    16 16 18 19 20 21\r\n-- Definir la funci\u00f3n linea tal que (linea n) es la l\u00ednea n-\u00e9sima de los\r\n-- tri\u00e1ngulos aritm\u00e9ticos. Por ejemplo, \r\n--    linea 4  ==  [7,8,9,10]\r\n--    linea 5  ==  [11,12,13,14,15]\r\n-- ---------------------------------------------------------------------\r\n\r\nlinea n = [suma (n-1)+1..suma n]\r\n\r\n-- La definici\u00f3n puede mejorarse\r\nlinea2 n = [s+1..s+n]\r\n           where s = suma (n-1)\r\n\r\n-- Una variante m\u00e1s eficiente es \r\nlinea3 n = [s+1..s+n]\r\n           where s = suma2 (n-1)\r\n\r\n-- La mejora de la eficiencia se puede observar como sigue:\r\n--    ghci> :set +s\r\n--    ghci> head (linea 1000000)\r\n--    499999500001\r\n--    (17.94 secs, 309207420 bytes)\r\n--    ghci> head (linea3 1000000)\r\n--    499999500001\r\n--    (0.01 secs, 525496 bytes)\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 3.3. Definir la funci\u00f3n triangulo tal que (triangulo n) es\r\n-- el tri\u00e1ngulo aritm\u00e9tico de altura n. Por ejemplo,\r\n--    triangulo 3  ==  [[1],[2,3],[4,5,6]]\r\n--    triangulo 4  ==  [[1],[2,3],[4,5,6],[7,8,9,10]]\r\n-- ---------------------------------------------------------------------\r\n\r\ntriangulo n = [linea m | m <- [1..n]]\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En la clase de hoy del curso Inform\u00e1tica (de 1\u00ba de Grado en Matem\u00e1ticas) se han comentado las soluciones de los 3 primeros ejercicios de la 4\u00aa relaci\u00f3n sobre definiciones por comprensi\u00f3n. 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":[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\/2243"}],"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=2243"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2243\/revisions"}],"predecessor-version":[{"id":2649,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/2243\/revisions\/2649"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=2243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=2243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=2243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}