{"id":990,"date":"2010-12-15T18:40:15","date_gmt":"2010-12-15T18:40:15","guid":{"rendered":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2010-ejercicios-de-definiciones-por-plegado\/"},"modified":"2013-03-08T05:50:05","modified_gmt":"2013-03-08T05:50:05","slug":"i1m2010-ejercicios-de-definiciones-por-plegado","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/i1m2010-ejercicios-de-definiciones-por-plegado\/","title":{"rendered":"I1M2010: Ejercicios de definiciones por plegado"},"content":{"rendered":"<p>En la clase de hoy de <a href=\"http:\/\/www.cs.us.es\/~jalonso\/cursos\/i1m-10\">Inform\u00e1tica de 1\u00ba del Grado en Matem\u00e1ticas<\/a> hemos comentado la resoluci\u00f3n de ejercicios por plegado, resaltando el paso de las definiciones por recursi\u00f3n a las correspondientes definiciones por plegados. Los ejercicios comentados son el 11 y el 12 de la <a href=\"https:\/\/www.glc.us.es\/~jalonso\/ejerciciosI1M2010\/index.php5\/Relaci%C3%B3n_11\">11\u00aa relaci\u00f3n<\/a>.<\/p>\n<p>Los ejercicios y su soluci\u00f3n se muestran a continuaci\u00f3n<br \/>\n<!--more--><\/p>\n<pre lang=\"haskell\">\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 11. Se considera la funci\u00f3n \r\n--    filtraAplica :: (a -> b) -> (a -> Bool) -> [a] -> [b]\r\n-- tal que (filtraAplica f p xs) es la lista obtenida aplic\u00e1ndole a los\r\n-- elementos de xs que cumplen el predicado p la funci\u00f3n f. Por ejemplo,\r\n--    filtraAplica (4+) (<3) [1..7]  =>  [5,6]\r\n-- Se pide, definir la funci\u00f3n\r\n-- 1. por comprensi\u00f3n,\r\n-- 2. usando map y filter,\r\n-- 3. por recursi\u00f3n y\r\n-- 4. por plegado (con foldr).\r\n-- ---------------------------------------------------------------------\r\n\r\n-- La definici\u00f3n con lista de comprensi\u00f3n es\r\nfiltraAplica_1 :: (a -> b) -> (a -> Bool) -> [a] -> [b]\r\nfiltraAplica_1 f p xs = [f x | x <- xs, p x]\r\n\r\n-- La definici\u00f3n con map y filter es\r\nfiltraAplica_2 :: (a -> b) -> (a -> Bool) -> [a] -> [b]\r\nfiltraAplica_2 f p xs = map f (filter p xs)\r\n\r\n-- La definici\u00f3n por recursi\u00f3n es\r\nfiltraAplica_3 :: (a -> b) -> (a -> Bool) -> [a] -> [b]\r\nfiltraAplica_3 f p [] = []\r\nfiltraAplica_3 f p (x:xs) | p x       = f x : filtraAplica_3 f p xs\r\n                          | otherwise = filtraAplica_3 f p xs\r\n\r\n-- La definici\u00f3n por plegado es\r\nfiltraAplica_4 :: (a -> b) -> (a -> Bool) -> [a] -> [b]\r\nfiltraAplica_4 f p = foldr g []\r\n                     where g x y | p x       = f x : y\r\n                                 | otherwise = y\r\n\r\n-- La definici\u00f3n por plegado usando lambda es\r\nfiltraAplica_4' :: (a -> b) -> (a -> Bool) -> [a] -> [b]\r\nfiltraAplica_4' f p = \r\n    foldr (\\x y -> if p x then (f x : y) else y) []\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 12. Redefinir, usando foldr, la funci\u00f3n concat. Por ejemplo, \r\n--    concat' [[1,3],[2,4,6],[1,9]]  ==  [1,3,2,4,6,1,9]\r\n-- ---------------------------------------------------------------------\r\n\r\n-- La definici\u00f3n por recursi\u00f3n es \r\nconcatR :: [[a]] -> [a]\r\nconcatR [] = []\r\nconcatR (xs:xss) = xs ++ concatR xss\r\n\r\n-- La definici\u00f3n por plegado es\r\nconcat' :: [[a]] -> [a]\r\nconcat' = foldr (++) []\r\n\r\n-- ---------------------------------------------------------------------\r\n-- Ejercicio 13. Redefinir, usando foldr, la funci\u00f3n map. Por ejemplo,\r\n--    map' (+2) [1,7,3]  ==  [3,9,5]\r\n-- ---------------------------------------------------------------------\r\n\r\n-- La definici\u00f3n por recursi\u00f3n es\r\nmapR :: (a -> b) -> [a] -> [b]\r\nmapR f [] = []\r\nmapR f (x:xs) = f x : mapR f xs\r\n\r\n-- La definici\u00f3n por plegado es\r\nmap' :: (a -> b) -> [a] -> [b]\r\nmap' f = foldr g []\r\n         where g x xs = f x : xs\r\n\r\n-- La definici\u00f3n por plegado usando lambda es\r\nmap'' :: (a -> b) -> [a] -> [b]\r\nmap'' f = foldr (\\x y -> f x:y) []\r\n\r\n-- Otra definici\u00f3n es\r\nmap''' :: (a -> b) -> [a] -> [b]\r\nmap''' f = foldr ((:) . f) []\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 comentado la resoluci\u00f3n de ejercicios por plegado, resaltando el paso de las definiciones por recursi\u00f3n a las correspondientes definiciones por plegados. Los ejercicios comentados son el 11 y el 12 de la 11\u00aa relaci\u00f3n. Los ejercicios y su soluci\u00f3n se muestran&#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":[133],"tags":[287],"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\/990"}],"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=990"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/990\/revisions"}],"predecessor-version":[{"id":2964,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/posts\/990\/revisions\/2964"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/media?parent=990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/categories?post=990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/vestigium\/wp-json\/wp\/v2\/tags?post=990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}