| ( 8080 ) Programación declarativa avanzada |
| 6 Créditos. (3 Teo / 3 Prá) |
Grupos: 1 T / 1 P |
Segundo cuatrimestre |
| Adscrita al área: ( 570 A )
LENGUAJES Y SISTEMAS INFORMÁTICOS |
Programa de la asignatura
Objetivos/competencias que se pretende conseguir con la asignatura:
1. Complementar las técnicas
estudiadas en la asignatura "Programación
Declarativa".
2. Profundizar en los
fundamentos de los paradigmas de la
Programación Declarativa.
3. Estudiar las
técnicas de implementación.
4. Presentar
aspectos alternativos dentro de los
contextos aplicativo, relacional, y la
integración de ambos.
5. Describir las
extensiones más interesantes: concurrencia,
objetos, eventos, modularidad, orden superior,
restricciones, servidores WEB, aplicaciones
Internet, ...
6. Facilitar la futura
elección y realización del Proyecto de
Fin de Carrera.
Contenido (programa):
1ª PARTE: FUNDAMENTOS DE LA
PROGRAMACIÓN DECLARATIVA
1. Fundamentos de la
Programación Lógica
1.1 Semántica
declarativa de programas definidos
1.2
Negación y manipulación dinámica de
programas
1.3 Otras lógicas como
lenguajes de programación
2. Fundamentos de
la Programación Funcional
2.1
Introducción al lambda cálculo. Lambda
teorías
2.2 Definibilidad
2.3 Semántica denotacional.
3. Lógica
ecuacional y Sistemas de reescritura
4.
Sistemas de tipos
4.1 El lambda
cálculo con tipos
4.2 Sistemas de
tipos para Prolog
2ª PARTE:
EXTENSIONES Y OTROS PARADIGMAS DE LA
PROG. DECLARATIVA
5. Concurrencia en los
lenguajes lógicos
5.1 Modos de
Paralelismo en los lenguajes lógicos
5.2 Lenguajes lógicos concurrentes
5.3
Técnicas de la PL concurrente
6.
Programación Lógica con restricciones
6.1 El esquema CLP
6.2
Extensiones de la Programación Lógica con
restricciones
7. Mónadas y continuaciones
7.1 Mónadas algebraicas y mónadas à la
Haskell
7.2 Programación con
mónadas
8. Concurrencia en los lenguajes
funcionales
8.1 Programación funcional
concurrente
8.2 Técnicas de la
Programación Funcional concurrente en
Haskell
9. Lenguajes lógico-funcionales
9.1 Resolución, Unificación y Reescritura
9.2 Lenguajes lógico-funcionales
10. Otras
extensiones
10.1 Objetos en los
lenguajes declarativos
10.2 Extensiones
para aplicaciones en Internet
3ª
PARTE: TÉCNICAS AVANZADAS EN PROGRAMACIÓN
DECLARATIVA
11. Técnicas avanzadas de
Programación Lógica
11.1 Técnicas de
búsqueda
11.2 Técnicas de
meta-interpretación
11.3 Reconocimiento de
lenguajes
12. Técnicas avanzadas de
programación funcional
12.1 Aplicación
de la evaluación perezosa
12.2
Técnicas de búsqueda en grafos
12.3 Algoritmos numéricos y simulación
4ª PARTE: IMPLEMENTACIÓN DE LENGUAJES
DECLARATIVOS
13. Implementación de lenguajes
lógicos
13.1 Máquina abstracta de
Warren
13.2 Técnicas adicionales
de traducción
14. Implementación de lenguajes
funcionales
14.1 Traducción al lambda
cálculo
14.2 Modelos de Compilación
14.3 Reducción de grafos
Metodología pedagógica:
Es decisiva la participación
del alumno, evitando el abuso de
clases magistrales, aunque un número mínimo
serán indispensables. Proponemos exposiciones
monográficas de dos tipos:
• el
profesor introduce o desarrolla parcialmente
algún tema, y
• los alumnos,
organizados en grupos reducidos (o en
forma individual, dependiendo del número de
alumnos matriculados, completarán y expondrán
los diferentes temas, ejercicios y/o
complementos elegidos.
Se hará uso de
medios audiovisuales estandarizados; esencialmente,
la pizarra y un cañon de proyección
conectado a un ordenador. La página
web de la asignatura servirá como
repositorio de todo el material
elaborado.
Sistema de evaluación del rendimiento académico:
La evaluación se realizará
mediante un único examen que versará
sobre todos los temas descritos en las
clases.
Quedarán exentos del examen los
alumnos que participen activamente en las
clases, y realicen y expongan uno o
varios trabajos monográficos. Éstos consistirán
en, bien
• Complementar ejercicios/temas
propuestos, de entre los que el
profesor proponga en sus exposiciones, o
bien
• Describir y exponer un tema
de entre los propuestos por el
profesor.
Actividades académicas complementarias:
Bibliografía recomendada:
· BIRD, R. Introducción
a la Programación Funcional con Haskell.
Prentice-Hall. 1999.
· RUIZ, B.C.,
GUTIERREZ, F., GUERRERO, P., GALLARDO, J.E.
Razonando con Haskell. Una introducción a
la Programación Funcional. Thomson. 2004.
· CLOCKSIN, W., MELLISH, C.
Programming in Prolog. Springer-Verlag. 1994
· STERLING, L., SHAPIRO, E.. The
Art of Prolog. The MIT Press. 1994.
· LLOYD, J. Foundations of Logic
Programming. Springer-Verlag. 1984.
·
BARENDREGT, H.P. Lambda calculi with types.
En Abramsky, S., Handbook of Logic in
Computer Science. Oxford Univ. Press. 1992.
· NILSSON, U., MALUSZYNSKI, J.
Logic, Programming and Prolog. Wiley. 1995.
· READE, C. Elements of
Functional Programming. Addison-Wesley. 1989.
· PEYTON JONES, S. The
implementation of Functional Programming
Languages. Prentice-Hall. 1987.
·
AIT-KACI, H. Programming Languages.
www.isg.sfu.ca/ ~hak. 1999.
·
BAADER,F., NIPKOW, T. Term Rewriting and
All That. Cambridge Univ. Press. 1998.
· CONLON, T. Programming in
Parlog. Addsion-Wesley. 1989.
Salto de página. Vea Presentación Preliminar.