Próxima revisión | Revisión previa |
introalg:taller09 [2009/03/20 11:03] – creado laura | introalg:taller09 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1 |
---|
====== Taller de Programación Declarativa ====== | ====== Taller de Programación Declarativa ====== |
====== Introducción a los Algoritmos 2009 ====== | ====== Introducción a los Algoritmos 2009 ====== |
| |
Este año vamos a ver dos paradigmas de programación: programación lógica y programación funcional. En ambos casos se trata de programación declarativa, que tiene varias diferencias con el paradigma de programación imperativa que quizás muchos de ustedes conozcan (C, C++, Visual Basic, Perl). | |
| |
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. | 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 ===== | ===== Clases ===== |
| |
|Mar 30 | [[IntroAlg:taller09_1|Clase 1]] | Introducción a programación declarativa, Introducción a prolog, átomos, sintaxis, pequeño ejemplo. | | |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]] | Ampliación de la clase anterior. | | |Abr 6 | [[IntroAlg:taller09_2|Clase 2]] | Consolidación de conceptos, uso de la traza, analizando problemas. | |
|Abr 13 | [[IntroAlg:taller09_3|Clase 3]] | Dos ejemplos de razonamiento en prolog. | | |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]] | Introducción a programación funcional, manejo de Hugs, inferencia de tipos, tuplas, análisis por casos | | |Abr 20 | [[IntroAlg:taller09_4|Clase 4]] | Repaso de programación funcional, modularización, definiciones locales. | |
|Abr 27 | [[IntroAlg:taller09_5|Clase 5]] | Pattern matching numérico, tuplas y listas, divide y conquista, estilo de código | | |Abr 27 | [[IntroAlg:taller09_5|Clase 5]] | Listas y recursión lineal en haskell y prolog. | |
|May 4 | [[IntroAlg:taller09_6|Clase 6]] | Recursión lineal, aplicaciones, filtros, acumuladores | | |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 11 | [[IntroAlg:taller09_7|Clase 7]] | Parcialito 1 | |
|May 18 | [[IntroAlg:taller09_8|Clase 8]] | generalización de las funciones vistas (map, filter, fold, etc.), alto orden | | |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]] | Aplicando generalizaciones a funciones complejas, recursión en dos argumentos | | |Jun 1 | [[IntroAlg:taller09_9|Clase 9]] | Resolviendo problemas complejos. | |
|Jun 8 | [[IntroAlg:taller09_10|Clase 10]] | Parcialito 2 | | |Jun 8 | [[IntroAlg:taller09_10|Clase 10]] | Parcialito 2 | |
|Jun 15 | [[IntroAlg:taller09_11|Clase 11]] | La Guinda | | |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]]. |
===== Problemas ===== | |
| |
* [[introalg:problemas09|Problemario del taller]], con todos los problemas que vas a resolver en el taller de Haskell. | |
| |
* [[introalg:rincon09|Wiki de Scripts Haskell]], aca podés dejar código [[http://es.wikipedia.org/wiki/Haskell | Haskell]] de manera libre. | |
| |
===== Programas ===== | ===== Programas ===== |
| |
==Intérprete de prolog (programación lógica)== | ===Intérprete de prolog (programación lógica)=== |
| |
Vamos a usar [[http://www.swi-prolog.org/|SWIProlog]]. | 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)== | ===Intérprete de haskell (programación funcional)=== |
| |
Vamos a usar [[http://www.haskell.org/hugs/|Hugs]]. | Vamos a usar [[http://www.haskell.org/hugs/|Hugs]]. |
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): | 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.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. |
| |
| |
* 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. | * 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. | * 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. | * 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]]. | * Mucho material en inglés de [[http://haskell.org/haskellwiki/Books_and_tutorials#Introductions_to_Haskell|Introductions to Haskell]]. |