Encabezado página
( 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.



Cerrar esta ventana