====== Taller de Programación Declarativa ====== ====== Introducción a los Algoritmos 2009 ====== Las clases serán los lunes en el aula D2 (laboratorio de las baterías D), en dos comisiones: comisión 1, de 11:30 a 14:30, comisión 2, de 14:30 a 17:30. Este año vamos a ver aproximaciones distintas a la [[http://es.wikipedia.org/wiki/Programaci%C3%B3n_declarativa|programación declarativa]]: [[http://es.wikipedia.org/wiki/Programaci%C3%B3n_L%C3%B3gica|programación lógica]] (en [[http://es.wikipedia.org/wiki/Prolog|prolog]]) y [[http://es.wikipedia.org/wiki/Programaci%C3%B3n_funcional|programación funcional]] (en [[http://es.wikipedia.org/wiki/Haskell|haskell]]). Este tipo de programación tiene varias diferencias con la [[http://es.wikipedia.org/wiki/Programaci%C3%B3n_imperativa|programación imperativa]] que quizás muchos de ustedes conozcan (C, C++, Visual Basic, Perl). ===== Clases ===== |Mar 30 | [[IntroAlg:taller09_1|Clase 1]] | Introducción a programación declarativa, introducción a prolog, átomos, sintaxis, pequeño ejemplo. | |Abr 6 | [[IntroAlg:taller09_2|Clase 2]] | Consolidación de conceptos, uso de la traza, analizando problemas. | |Abr 13 | [[IntroAlg:taller09_3|Clase 3]] | Introducción a haskell, tipos, análisis por casos, pattern matching. | |Abr 20 | [[IntroAlg:taller09_4|Clase 4]] | Repaso de programación funcional, modularización, definiciones locales. | |Abr 27 | [[IntroAlg:taller09_5|Clase 5]] | Listas y recursión lineal en haskell y prolog. | |May 4 | [[IntroAlg:taller09_6|Clase 6]] | Repaso de recursión, ejercicios de recursión. | |May 11 | [[IntroAlg:taller09_7|Clase 7]] | Parcialito 1 | |May 18 | [[IntroAlg:taller09_8|Clase 8]] | Generalización de funciones recursivas en listas y alto orden. Aplicando generalizaciones. | |Jun 1 | [[IntroAlg:taller09_9|Clase 9]] | Resolviendo problemas complejos. | |Jun 8 | [[IntroAlg:taller09_10|Clase 10]] | Parcialito 2 | |Jun 15 | [[IntroAlg:taller09_11|Clase 11]] | La Guinda | Hay también una página con las [[http://www.cs.famaf.unc.edu.ar/wiki/doku.php?id=introalg:taller09_soluciones|soluciones a los ejercicios]]. ===== Programas ===== ===Intérprete de prolog (programación lógica)=== Vamos a usar [[http://www.swi-prolog.org/|SWIProlog]]. Existen versiones para [[http://www.swi-prolog.org/download/stable/bin/pl-5.6.64-339.i586.rpm|linux]], [[http://www.swi-prolog.org/download/stable/bin/w32pl5664.exe|windows]], [[http://www.swi-prolog.org/download/stable/bin/w64pl5664.exe|windows de 64 bits]], [[http://www.swi-prolog.org/download/stable/bin/swi-prolog-5.6.64-leopard-intel.mpkg.zip|mac sobre intel]] y [[http://www.swi-prolog.org/download/stable/bin/swi-prolog-5.6.64-leopard-powerpc.mpkg.zip|mac sobre power pc]]. ===Intérprete de haskell (programación funcional)=== Vamos a usar [[http://www.haskell.org/hugs/|Hugs]]. Las principales distribuciones Linux (Debian, Ubuntu, Fedora y Gentoo) incluyen Hugs como un paquete de instalación.\\ Para los usuarios de Windows y [[http://es.wikipedia.org/wiki/Unix|*nix]], hay versiones para bajar desde [[http://cvs.haskell.org/Hugs/pages/downloading.htm|Downloading Hugs]]. \\ En Windows tenemos [[http://cvs.haskell.org/Hugs/downloads/2006-09/MinHugs-Sep2006.exe|MinHugs]] una versión pequeña de solo 1.4MiB de descarga. ===== Bibliografía ===== ===Programación lógica=== Hay varios cursos muy claros y didácticos para aprender Prolog on-line, los que más me gustan a mí (de más a menos): * [[http://www.learnprolognow.org/|Learn Prolog Now!]], en inglés (también en [[http://cs.union.edu/~striegnk/learn-prolog-now/lpnpage.php?pageid=handheld|libro]]). * [[http://www.fdi.ucm.es/profesor/evah/IAIC/prolog.html|curso de Inteligencia Artificial e Ingeniería del Conocimiento]] en la Universidad Complutense de Madrid, desde donde hay muchos links a las referencias básicas de Prolog, todos ellos actualizados. Se los resumo acá (en la página del curso está esta información ampliada): * los mejores libros de Prolog, en inglés y castellano: * Sterling, Leon y Shapiro, Ehud. 2001. //The Art of Prolog : advanced programming techniques//. MIT Press, (5th Edition 2001). * Clocksin, William F. y Mellish, Christopher S. 1993. //Programación en Prolog// (traducción de "//Programming in Prolog//"). Gustavo Gili (en inglés, editado en //Springer//). * apuntes en castellano: * filminas de José Emilio Labra Gayo (profesor de la Universidad de Oviedo) sobre [[http://www.fdi.ucm.es/profesor/evah/IAIC/prolog/PLpura.pdf|Programación Lógica Pura]]. 6 hojas. * apuntes de José Emilio Labra Gayo sobre [[http://www.fdi.ucm.es/profesor/evah/IAIC/prolog/PPProlog.pdf|Programación Práctica en Prolog]]. 31 hojas. * Guía de Francisco Gutiérrez Lopez (profesor de la Universidad de Málaga) sobre el [[http://www.fdi.ucm.es/profesor/evah/IAIC/prolog/guiaUsoProlog.pdf|Uso Básico de Prolog]]. 9 hojas. * apuntes en inglés: los [[http://www.fdi.ucm.es/profesor/evah/IAIC/prolog/aipp_coursenotes.pdf|apuntes sobre prolog]] de Tim Smith, un profesor de un curso de prolog para inteligencia artificial en la Universidad de Edimburgo. ===Programación funcional=== * José Gallardo, Paco Gutiérrez y Blas Ruiz, [[http://www.lcc.uma.es/~pepeg/pfHaskell/gentle | "Una introducción agradable a Haskell versión 98"]], Febrero de 2001. * Traducción de [[http://haskell.org/tutorial | "A gentle introduction to Haskell Version 98"]]. * Blas C. Ruiz, Francisco Gutiérrez, Pablo Guerrero y José E. Gallardo, [[http://www.lcc.uma.es/~pepeg/pfHaskell/index.html | "Razonando con Haskell"]], Thompson, 2004. * Jose E. Labra G., [[http://horru.lsi.uniovi.es/~labra/FTP/IntHaskell98.pdf|Introducción al lenguaje Haskell]], Universidad de Oviedo, Departamento de Informática, Octubre 1998. * un libro electrónico, on-line, con dibujitos! [[http://learnyouahaskell.com/chapters|Learn You a Haskell for Great God!]] * otro libro electrónico on-line, muy bueno (aunque sin dibujitos): [[http://book.realworldhaskell.org/read/|Real World Haskell]] * Simon Thompson, [[http://www.cs.kent.ac.uk/people/staff/sjt/craft2e/|Haskell The Craft of Functional Programming]], 2da edición, Addison-Wesley, 1999. * Mucho material en inglés de [[http://haskell.org/haskellwiki/Books_and_tutorials#Introductions_to_Haskell|Introductions to Haskell]].