PROGRAMACIÓN DECLARATIVA

Carácter Departamento/Área Profesores
Bibliografía
Prácticas Evaluación Objetivos

[BUZÓN de P. Lógica]            [BUZÓN de P. Funcional]

TEMARIO DE TEORIA

Tema 1: Estilos de programación. Programación declarativa.

PRIMERA PARTE: PROGRAMACIÓN LÓGICA

Tema 2: Programación lógica.

2.1 Introducción. Sintaxis y terminología.
2.2 Cláusulas. Cláusulas de Horn.
2.3 Programación con cláusulas de Horn.
2.4 Sustitución y Unificación.
2.5 Resolución. SLD-Resolución.
2.6 Lógica y control. SLD-árboles.

Tema 3: El lenguaje Prolog.

3.1 Elementos sintácticos.
3.2 Términos como estructuras de datos.
3.3 Listas.
3.4 Igualdad y negación.
3.5 Seguimiento de un programa.
3.6 El corte y sus usos.
3.7 Predicados predefinidos.
3.8 Definición de operadores.

Tema 4: Técnicas avanzadas de programación en Prolog.

4.1 Parámetros acumuladores.
4.2 Simulación de variables imperativas.
4.3 Generar y comprobar.
4.4 Búsqueda en grafos.
4.5 Reglas gramaticales (DCG´s).

SEGUNDA PARTE: PROGRAMACIÓN FUNCIONAL

Tema 5: Programación funcional.

5.1 Estilo aplicativo.
5.2 Programación funcional con tipos. Haskell.
- Declaración de datos y tipos de datos.
- Declaración de funciones. Reglas de reescritura. Patrones
- Definiciones locales.
5.3 Apéndice: Cadenas ("strings"). Errores.

Tema 6: Programación funcional avanzada.

6.1 Funciones de orden superior.
6.2 Funciones estrictas y no estrictas. Evaluación voraz y evaluación perezosa.
6.3 Manejo de estructuras infinitas.
6.4 Formas especiales con listas. Secuencias aritméticas. Comprehesión de listas.

Tema 7: Programación simbólica.

7.1 S-expresiones.
7.2 Introducción a LISP.
- Interpretación de S-expresiones.
- Manejo de listas.
- Funciones y variables.
- Igualdad. Aritmética. Condicionales. Expresiones cualificadas.
- Orden superior.
7.3 Aplicaciones.

Estudios: I. Informática
Carácter: Obligatoria
Curso: 2º
Créditos: 9 

Departamento: Sistemas Informáticos
Área de Conocimiento: Lenguajes y Sistemas Informáticos


PROFESORES
Juan Antonio Guerrero Abenza
Ginés Moreno Valverde

BIBLIOGRAFÍA

- Apt, K.: From Logic Programming to Prolog. Prentice Hall, 1997
- Bird, R.; Walder, P.: Introducción a la Programación Funcional en Haskell. (2ª ed). Prentice-Hall 2000
  (Edición en inglés: 1998)
- Bratko, I.: PROLOG: Programming for Artificial Intelligence. Addison Weley, 1990
- Clocksin, W.F.; Mellis, C.S.: Programación en Prolog. Gustavo Gili, 1987
- Doets, K.: From Logic to Logic Programming. The MIT Press, Cambidge, 1994
- Coelho,H.; Cotta,J.C.: Prolog by example. How to learn, teach and use it. Springer-Verlag, 1988
- Field, A.J.; Harrison, P.G.: Functional programming. Addison-Wesley, 1988
- Hogger, C.: Essentials of Logic Programming. Oxford Universuty Press, 1990
- Hudak, P.; Peterson, J.; Fasel, J.H.: A gentle inttroduction to Haskell. Versiones 94 y 98. 1994-1999 
   (
http:// haskell.org)
- Julián, P.; Alpuente, M.: Programación Lógica. Teoría y Práctica. Pearson-Prentice Hall. 2007
- Klop, J.: Trem Rewriting Systems. En Handbook of Logic in Computer Science, Vol. I. Oxforf Univ. Press, 1992
- Kowalski, R.: Lógica, programación e inteligencia artificial. Diaz de Santos, 1988
- Lalement, R: Computation as Logic. Prentice Hall 1993 
- Lloyd, J.W.: Foundations of logic programming. Springer-Verlag, 1987
- Reade, C.: Elements of Functional Programming. Addison Wesley,  1993
- Robert, A.M.; Rex, L.P.: Symbolic computing with Lisp and Prolog. John Wiley & sons, 1988

-
Ruíz, B.C.; Gutiérrez, F.; Guerrero, P.; Gallardo, J.E.: Razonando con Haskell. Una introducción a la Programación Funcional. Servicio reprogr. (OCÉ) E.T.S.I.I., Universidad de Málaga. 2000
- Sicstus Prolog User's Manual. Swedish Institute of Computer Science. 1995
- Sterling, L.; Shapiro, E.: The art of Prolog:Advanced programming techniques. MIT Press, 1986
- Thomsom, Simon: HASKELL: The Craft of Functional Programming . Addison-Wesley, 1996
- Touretzky, D.S.: Common Lisp. A gentle introduction to symbolic computation. The Benjamin/Commings Publishing Company, Inc. 1989

PRÁCTICAS

1.- Seminario de SICSTUS Prolog       

2.- Prácticas guiadas
- expresividad clausal
- indeterminismo y backtracking
- negación, corte y predicados metalógicos
- programación con listas
- técnicas avanzadas


3.- Seminario de HUGS Haskell

4.- Prácticas guiadas  
- expresividad funcional
- ajuste y reducción
- evaluación impaciente y perezosa
- funciones de orden superior
- aplicación parcial de funciones



EVALUACIÓN- Se realizarán dos controles periódicos (examen escrito y/o resolución-exposición de problemas) para cada una de las partes (prog. lógica y prog. funcional).
- Habrá un examen oficial en Mayo y otro en Julio para los alumnos que no hayan superado alguna de las partes en los controles. Las notas de cada parte se conservarán por separado hasta el examen de Julio inclusive.
- Para aprobar la asignatura es necesario que las calificaciones de cada parte no sean inferiores a 4, ni la media entre ambas inferior a 5.

OBJETIVOSSe pretende dar al alumno una visión panorámica de la esencia de la programación declarativa, mostrando sus ventajas e inconvenientes y comparándola con otros paradigmas de programación más difundidos como el imperativo o el orientado a objetos. Se estudiarán los dos esquemas declarativos clásicos, funcional y lógico, y se pondrá especial énfasis en los aspectos más prácticos de la materia con el objetivo de que el alumno conozca las posibilidades reales de estos sistemas como herramientas alternativas y complementarias de programación.

 

------
Visitas desde el 17.5.2002: