{"id":636,"date":"2014-11-25T06:00:24","date_gmt":"2014-11-25T04:00:24","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=636"},"modified":"2022-03-25T20:12:02","modified_gmt":"2022-03-25T18:12:02","slug":"repeticion-ciclica","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/repeticion-ciclica\/","title":{"rendered":"Repetici\u00f3n c\u00edclica"},"content":{"rendered":"<h4>Enunciado<\/h4>\n<pre lang=\"text\">\n-- Definir la funci\u00f3n\n--    ciclica :: [a] -> [a]\n-- tal que (ciclica xs) es la lista obtenida repitiendo c\u00edclicamente los\n-- elementos de xs. Por ejemplo,\n--    take 10 (ciclica [3,5])    ==  [3,5,3,5,3,5,3,5,3,5]\n--    take 10 (ciclica [3,5,7])  ==  [3,5,7,3,5,7,3,5,7,3]\n--    take 10 (ciclica [3,5..])  ==  [3,5,7,9,11,13,15,17,19,1]\n--    ciclica []                 ==  []\n--\n-- Comprobar con QuickCheck que la funci\u00f3n ciclica es equivalente a la\n-- predefinida cycle; es decir, para cualquier n\u00famero entero n y\n-- cualquier lista no vac\u00eda xs, se verifica que \n--    take n (ciclica xs) == take n (cycle xs)\n-- \n-- Nota. Al hacer la comprobaci\u00f3n limitar el tama\u00f1o de las pruebas como\n-- se indica a continuaci\u00f3n\n--    ghci> quickCheckWith (stdArgs {maxSize=7}) prop_ciclica\n--    +++ OK, passed 100 tests.\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Test.QuickCheck\n\n-- 1\u00aa definici\u00f3n\nciclica1 :: [a] -> [a]\nciclica1 [] = []\nciclica1 xs = xs ++ ciclica1 xs\n\n-- 2\u00aa definici\u00f3n\nciclica2 :: [a] -> [a]\nciclica2 [] = []\nciclica2 xs = ys where ys = xs ++ ys\n\n-- Comprobaci\u00f3n de eficiencia\n--    ghci> last (take 10000000 (ciclica1 [1,2])) \n--    2\n--    (3.69 secs, 1521758928 bytes)\n--    \n--    ghci> last (take 10000000 (ciclica2 [1,2])) \n--    2\n--    (0.21 secs, 561468144 bytes)\n-- La 2\u00aa definici\u00f3n es m\u00e1s eficiente.\n\n-- La propiedad es\nprop_ciclica :: Int -> [Int] -> Property\nprop_ciclica n xs =\n    not (null xs) ==> \n    take n (ciclica2 xs) == take n (cycle xs)\n\n-- La comprobaci\u00f3n es\n--    ghci> quickCheckWith (stdArgs {maxSize=7}) prop_ciclica\n--    +++ OK, passed 100 tests.\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Enunciado &#8212; Definir la funci\u00f3n &#8212; ciclica :: [a] -> [a] &#8212; tal que (ciclica xs) es la lista obtenida repitiendo c\u00edclicamente los &#8212; elementos de xs. Por ejemplo, &#8212; take 10 (ciclica [3,5]) == [3,5,3,5,3,5,3,5,3,5] &#8212; take 10 (ciclica [3,5,7]) == [3,5,7,3,5,7,3,5,7,3] &#8212; take 10 (ciclica [3,5..]) == [3,5,7,9,11,13,15,17,19,1] &#8212; ciclica [] == []&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","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":[5],"tags":[166,415,6,146],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/636"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=636"}],"version-history":[{"count":4,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/636\/revisions"}],"predecessor-version":[{"id":793,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/636\/revisions\/793"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}