{"id":655,"date":"2009-05-22T18:17:51","date_gmt":"2009-05-22T17:17:51","guid":{"rendered":"http:\/\/www.tiendadeultramarinos.es\/?p=655"},"modified":"2009-09-24T16:05:48","modified_gmt":"2009-09-24T14:05:48","slug":"programacion-funcional","status":"publish","type":"post","link":"https:\/\/www.tiendadeultramarinos.es\/?p=655","title":{"rendered":"Programaci\u00f3n funcional"},"content":{"rendered":"<p>El profesor de la asignatura de Lenguajes de Programaci\u00f3n nos mand\u00f3 hacer un trabajo para esta semana sobre distintos paradigmas de programaci\u00f3n: Objetos, Funcional y L\u00f3gico. Cada alumno ten\u00edamos que escoger un lenguaje distinto de un paradigma y los que fuesen del mismo, hacer una presentaci\u00f3n conjunta sobre el paradigma.<\/p>\n<p>Yo me decant\u00e9 por los lenguajes funcionales, porque ya s\u00e9 Programaci\u00f3n Orientada a Objetos y la L\u00f3gica no me atrae demasiado por ahora. Los funcionales, sin embargo, parecen bastante interesantes.<\/p><a name=\"teMiddle787501088\"><\/a><div class=\"te_div\" id=\"te787501088\">\n<p>La caracter\u00edstica fundamental de este paradigma es, obviamente, el uso de las funciones, pero no las que generalmente se denominan as\u00ed (o m\u00e9todos, procedimientos, etc.)\u00a0 en la programaci\u00f3n imperativa, sino que son m\u00e1s similares a las funciones matem\u00e1ticas.<\/p>\n<p>Esto es as\u00ed porque cumplen la propiedad de la <a href=\"http:\/\/es.wikipedia.org\/wiki\/Transparencia_referencial\">Transparencia Referencial<\/a>, la cual dice, a grosso modo, que el valor devuelto por una funci\u00f3n depende \u00fanicamente de los argumetnos con los que es llamada, y no de la historia del programa. Esta caracter\u00edstica es f\u00e1cilmente emulable en la programaci\u00f3n imperativa prescindiendo del uso y modificaci\u00f3n de variables globales. En los lenguajes funcionales es as\u00ed siempre.<\/p>\n<p>Los lenguajes m\u00e1s estrictos carecen de las estructuras iterativas cl\u00e1sicas, teniendo que utilizar la recursividad para resolver problemas que requieran repetici\u00f3n. Aunque algunos puedan disponer de las estructuras habituales, apenas se utilizan dado que la recursividad siempre se ha considerado una soluci\u00f3n mucho m\u00e1s elegante y l\u00f3gica que los bucles.<\/p>\n<p>Aqu\u00ed volvemos a acercarnos a las matem\u00e1ticas, donde existen muchas ecuaciones en forma recursiva:<\/p>\n<ul>\n<li>La Sucesi\u00f3n de Fibonacci, F<sub>0<\/sub>=0; f<sub>1<\/sub>=1; Fn=F<sub>n-1<\/sub>+F<sub>n-2<\/sub><\/li>\n<li>Factorial, 0!=1, n!=(n-1)!<\/li>\n<li><a href=\"http:\/\/es.wikipedia.org\/wiki\/Funci%C3%B3n_de_Ackermann\">Funci\u00f3n de Ackerman<\/a><\/li>\n<\/ul>\n<p>Otra caracter\u00edstica muy importante de estos lenguajes es que no suelen trabajar directamente con datos simples como un entero o un booleano, sino que los organizan en colecciones, generalmente de tipo lista o arary.<\/p>\n<p>Estos lenguajes tienen su base en los a\u00f1os 30, cuando Alonzo Church dise\u00f1\u00f3 un sistema formal llamado <a href=\"http:\/\/es.wikipedia.org\/wiki\/C%C3%A1lculo_Lambda\">Lambda-C\u00e1lculo<\/a> para el estudio de las funciones y la recursi\u00f3n. S\u00f3lo se basa en tres reglas,\u00a0 pero a primera vista parece algo complejo y no le he dedicado tiempo suficiente como para hablar de \u00e9l aqu\u00ed. S\u00f3lo s\u00e9 que tiene la misma expresividad que una m\u00e1quina de Turing, es decir, que<a href=\"http:\/\/es.wikipedia.org\/wiki\/Conjetura_de_Church-Turing\"> cualquier algoritmo que pueda ejecutar un humano o una m\u00e1quina, puede definirse dentro de este sistema<\/a>.<\/p>\n<p>El primer lenguaje funcional implementado fue LISP, muy influenciado por el \u03bb-C\u00e1lculo, del cual, lo m\u00e1s famoso son la <a href=\"http:\/\/xkcd.com\/297\/\">cantidad de par\u00e9ntesis<\/a> que hay que escribir para codificar cualquier cosa.<\/p>\n<p>Un a\u00f1o antes, Kenneth E. Iverson hab\u00eda inventado una notaci\u00f3n para ense\u00f1ar y estudiar algoritmos y funciones de la computaci\u00f3n. Cinco a\u00f1os m\u00e1s tarde la hizo p\u00fablica y tuvieron que esperarse cinco a\u00f1os m\u00e1s a que se implementara completamente. Se llama APL y es el lenguaje m\u00e1s expresivo que existe. Yo eleg\u00ed \u00e9ste para mi <a href=\"https:\/\/www.tiendadeultramarinos.es\/wordpress\/wp-content\/uploads\/presentacionapl.pdf\">presentaci\u00f3n<\/a> (esta versi\u00f3n tiene alg\u00fan fallo y me hubiera gustado ampliarla con algunas cosas m\u00e1s), y dedicar\u00e9 m\u00e1s adelante un post completo a \u00e9l.<\/p>\n<p>Poco despu\u00e9s los lenguajes funcionales cayeron en el olvido, hasta que en los a\u00f1os 80 volvieron a atraer la atenci\u00f3n de los desarrolladores y todo el mundo decidi\u00f3 crear su propio lenguaje funci\u00f3nal, provocando la aparici\u00f3n de decenas de ellos (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Category:Functional_languages\">la lista en la Wikipedia<\/a> es bastante amplia).<\/p>\n<p>En medio de toda esta eclosi\u00f3n, los gur\u00fas de los lenguajes fucnionales decidieron juntarse en un congreso y elaborar un lenguaje estandarizado y, m\u00e1s o menos, a gusto de todos. De aqu\u00ed naci\u00f3 <a href=\"http:\/\/es.wikipedia.org\/wiki\/Haskell\">Haskell<\/a> en 1990, el cual sigue evolucionando.<\/p>\n<p>Otros tambi\u00e9n conocidos son ML, Scheme, Miranda e incluso las hojas de c\u00e1lculo tipo Excel podr\u00edan englobarse en estos grupos. El entorno matem\u00e1tico <strong>R<\/strong> (el que utilic\u00e9 para el c\u00e1lculo del Perceptron en mi <a href=\"https:\/\/www.tiendadeultramarinos.es\/?p=415\">PFC <\/a>) tambi\u00e9n es un lenguaje funcional (combinado con objetos).<\/p>\n<\/div><p style=\"text-align: center;\"><a style=\"display:none;\" class=\"theTag\" id=\"te787501088\" onClick=\"expand('#te787501088');\" href=\"#teMiddle787501088\"><\/a><\/p><script language=\"JavaScript\" type=\"text\/javascript\">expander_hide('#te787501088');<\/script>","protected":false},"excerpt":{"rendered":"<p>El profesor de la asignatura de Lenguajes de Programaci\u00f3n nos mand\u00f3 hacer un trabajo para esta semana sobre distintos paradigmas de programaci\u00f3n: Objetos, Funcional y L\u00f3gico. Cada alumno ten\u00edamos que escoger un lenguaje distinto de un paradigma y los que fuesen del mismo, hacer una presentaci\u00f3n conjunta sobre el paradigma. Yo me decant\u00e9 por los &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.tiendadeultramarinos.es\/?p=655\" class=\"more-link\">Seguir leyendo<span class=\"screen-reader-text\"> \u00abProgramaci\u00f3n funcional\u00bb<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-655","post","type-post","status-publish","format-standard","hentry","category-informatica","entry"],"_links":{"self":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts\/655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=655"}],"version-history":[{"count":3,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts\/655\/revisions"}],"predecessor-version":[{"id":657,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=\/wp\/v2\/posts\/655\/revisions\/657"}],"wp:attachment":[{"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tiendadeultramarinos.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}