MATERIA: Programación Funcional y Lógica

CLAVE: COMP-570

SEMESTRE DE UBICACION: Quinto

AREA:Ciencias de la computación


OBJETIVOS: Se busca con este curso familiarizar a los estudiantes con los paradigmas de la programacion funcional y lógica. El primero de éstos está intimamente ligado al estudio de los lenguajes de programación en cuanto a su aspecto semántico, mientras que el segundo es una herramienta poderosísima en este mismo sentido en las aplicaciones de Inteligencia Artificial. Se revisan en este curso el estilo de programación de los lenguajes funcionales, su estructura, aplicaciones e imprementación

TEMARIO:

  1. Programación funcional

    • Funciones y programas
      • Programación con funciones
      • Programación con procedimientos

    • Un lenguaje funcional puro
      • Datos simbólicos
      • Constructores y selectores elementales
      • La aritmética y los predicados elementales
      • Funciones recursivas
      • Más funciones recursivas
      • Parámetros acumuladores
      • Definiciones locales
      • Funciones de órden superior y expresiones
      • Notación de punto

    • Programas funcionales simples
      • Análisis dimensional -un ejemplo de programación estructurada y prueba estructurada de programas
      • Búsqueda de árboles -Comparación de programas para búsquedas por nivel (breadth first) y de profundidad (depth first)

    • Representación e interpretación de programas
      • Formas concretas y abstractas de programas
      • Ligado
      • Intérprete para la variante LISP

    • Corrrespondencia entre programas funcionales e imperativos
      • Un intérprete para un programa iterativo
      • Equivalentes funcionales de programas imperativos
      • Transformación de programas imperativos a programas funcionales
      • Soporte para programas funcionales en máquinas convencionales

    • Una arquitectura para programas funcionales
      • Generalidades de la computadora
      • La computadora SECD
      • Un compildor para la variante LISP
      • La programación del compilador
      • Terminación de la descripción semántica

  2. Programación Lógica

    • Construcciones Básicas
      • Hechos
      • Consultas
      • La variable lógica, sustituciones e instancias
      • Consultas de existencia
      • Hechos universales
      • Consultas conjuntivas y variables compartidas
      • Reglas
      • Un intérprete abstracto simple
      • El significado de un programa lógico

    • Programación de la base de datos
      • Base de datos simple
      • Datos estructurados y abstracción de los datos
      • Reglas recursivas
      • Programas lógicos y el modelo relacional de bases de datos

    • Programación recursiva
      • Aritmética
      • Listas
      • Composición de programas recursivos
      • Arboles binarios
      • Manipulación de expresiones simbólicas

    • El modelos computacional para los programas lógicos
      • Unificación
      • Un intérprete abstracto de programas lógicos

    • Teoría de la programación lógica
      • Semántica
      • Corretez de programas
      • Complejidad
      • Arboles de búsqueda
      • La negación en la programación lógica

BIBLIOGRAFIA:

  • Hogger, C,J., Introduction To Logic Programming, academic Press, Inc., 1984

  • Ullman, J.D., Elements of ML Programming, Prentice Hall Computer Science, 1994

BIBLIOGRAFIA COMPLEMENTARIA:

  • Coelho, H. Cotta, J.C. Prolong by Example, How Learn, Teach and Ise it, Springer-Verlag, 1988

  • Henderson, P. Functional Programming, Application and Implementation Prentice-Hall International, 1980

  • Hennesey, W., Common lisp, McGraw-Hill Computer Science, 1989

  • Lloyd, J.W., Foundations of logic Progamming, Second, extended edition, Springer-Verlag, 1987

  • Sangal, R.,Programming Paradigms in Lisp, McGraw-Hill Computer Science, 1991

  • Springer, G., Friedman, D.P. Scheme and the Art of Programming, McGraw-Hilñl Computer Science, 1990

  • Sterling, L., Shapiro, E., The Art of Prolog, Advanced Programming Techniques, The MIT Press, 1986