Programación Declarativa - Departamento de Lenguajes y Ciencias

Anuncio
Programación Declarativa
Curso 2004-2005
Ingeniería Técnica en Informática de Gestión
Departamento de Lenguajes y
Ciencias de la Computación
Universidad de Málaga
Programación Declarativa
1
Profesorado
9Programación Lógica y Funcional
Juan M. Molina Bravo
http://www.lcc.uma.es/~jmmb
Despacho: 3.2.47
Tutorías: Martes
de 16:30 a 18:30
Miércoles de 10:45 a 12:45
Programación Declarativa
2
Horario
Lunes
Miércoles
12:45 a 14:45
12:45 a 14:45
Con sesiones de laboratorio por determinar
dedicadas a clases prácticas en las que se avanza temario
Programación Declarativa
3
Temario (Programación Funcional)
•
•
•
•
•
Principios de la programación funcional
El lenguaje funcional Haskell
Programación funcional con estructuras
Programación funcional de orden superior
Corrección de programas funcionales
Programación Declarativa
4
Software (Programación Funcional)
9winhugs
entorno de programación en Haskell para Windows
http://www.haskell.org/hugs/
Programación Declarativa
5
Bibliografía I (Programación Funcional)
“Razonando con Haskell. Un curso sobre programación funcional”
B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo
Ed. Thomson , 2004.
“Introducción a la programación funcional con Haskell” (2ed)
R. Bird
Ed. Prentice-Hall, 1999.
“The Craft of Functional Programming”
S. Thompson
Ed. Addison-Wesley, 1999.
Programación Declarativa
6
Bibliografía II (Programación Funcional)
Tutoriales y bibliografía disponible en internet
http://www.haskell.org/bookshelf/#tutorials
Programación Declarativa
7
Temario (Programación Lógica)
1.
2.
3.
4.
5.
Principios de la programación lógica
El lenguaje lógico Prolog
Predicados extralógicos
Programación lógica con estructuras
Control en Prolog
Programación Declarativa
8
Software (Programación Lógica)
9SWI-Prolog
entorno de programación Prolog
http://www.swi-prolog.org
9SLD-Draw
representación de árboles SLD
http://www.lcc.uma.es/~pacog/apuntes/pd
Programación Declarativa
9
Bibliografía I (programación lógica)
“The Art of Prolog” (2ed)
Leon Sterling y Ehud Shapiro
MIT Press, 1994
“Prolog Programming for Artificial Intelligence” (3ed)
Ivan Bratko
Addison-Wesley, 2000
“Clause and Effect”
William F. Clocksin
Springer-Verlag, 1997
“Programación en Prolog” (2ed)
William F. Clocksin y Chris S. Mellish
Gustavo Gili, 1993
Programación Declarativa
10
Bibliografía II (programación lógica)
Libros gratuitos disponibles en internet:
“Prolog Programming: A First Course”
Paul Brna
http://cbl.leeds.ac.uk/~paul/prologbook/
“Logic, Programming and Prolog” (2ed)
Ulf Nilsson y Jan Maluszynski
http://www.ida.liu.se/~ulfni/lpp/
Programación Declarativa
11
Programación Declarativa
Antecedentes y evolución
Programación Declarativa
12
Programación Declarativa (p.d.)
La p.d. se caracteriza porque
9 los programas describen relaciones entre objetos/valores;
pueden ser relaciones funcionales o relaciones más generales, y
9 dejan que el ejecutor del lenguaje (intérprete o compilador)
trate de satisfacerlas aplicando un algoritmo fijo de cómputo.
Estudiaremos dos estilos de p. d.:
9 Programación Funcional (en Haskell)
“Cómputo = Reducción de expresiones”
9 Programación Lógica (en Prolog)
“Cómputo = Resolución de enunciados”
Programación Declarativa
13
Antecedentes históricos
Gottlob Frege (1848-1925),
creador del cálculo de predicados
Gottlob Frege
Programación Declarativa
14
Antecedentes históricos (1928)
David Hilbert
9 D. Hilbert y W. Ackermann plantean el
entscheidungsproblem, o problema de decisión,
relativo a la existencia de algún procedimiento
mecánico, sistemático, o algoritmo general,
para decidir la validez de un enunciado en la
lógica de predicados de primer orden.
Wilhelm Ackermann
Programación Declarativa
15
Antecedentes históricos de la p. f. (1936)
Alonzo Church
9 A. Church desarrolla el cálculo lambda, teoría
matemática de funciones recursivas.
9 “Calculabilidad efectiva” = expresable como
función recursiva en dicho cálculo.
9 No existe algoritmo (def. mediante fun. rec.) que
decida si dos expresiones cualesquiera del cálculo
lambda son equivalentes o no.
Programación Declarativa
16
Antecedentes históricos (1936)
Alan Turing
9A. Turing introduce la noción de máquina de Turing.
9 Una computación es efectiva si la puede llevar a
cabo una máquina de Turing.
9 No existe algoritmo para decidir si una máquina de
Turing se detendrá o no (1936).
Church y Turing demuestran que sus formalismos
describen el mismo conjunto de funciones calculables.
Programación Declarativa
17
Antecedentes históricos de la p. f. : los 60
John McCarthy
9(J. McCarthy, 1960) Aparición del primer
lenguaje funcional (impuro): LISP
.
Vinculación dinámica, sin orden superior, con
características imperativas
9 (P. Landin, década de los 60) Cálculo lambda
como metalenguaje para expresar el significado
de los lenguajes imperativos. Primer lenguaje
funcional puro: ISWIM (If you See What I
Mean), con las principales notaciones de la P.F.
Programación Declarativa
18
Antecedentes históricos de la p. f. :
de los 70 en adelante
9(R. Milner, 1978) Primer lenguaje funcional
moderno con inferencia de tipos, tipos
polimórficos, tipos abstractos y tratamiento
de excepciones: ML (Meta Language). Utiliza
evaluación precipitada.
Robin Milner
9 (D. Turner, década de los 80) Desarrollo de
los primeros lenguajes perezosos: Miranda.
9 (Finales de la década de los 80) Aparece la
primera definición de Haskell desarrollada por
un grupo de investigadores.
9 1999: Aparece la versión estable Haskell98.
Programación Declarativa
19
Lenguajes funcionales actuales:
Derivados/Implementaciones de ML
Standard ML
of New Jersey
http://www.smlnj.org
The Caml language
http://caml.inria.fr/
sml.net
http://www.cl.cam.ac.uk/Research/TSG/SMLNET/
http://www.it-c.dk/research/mlkit/
Programación Declarativa
20
Lenguajes funcionales actuales:
Implementaciones de Haskell
http://www.haskell.org/
http://www.haskell.org/hugs/
http://www.haskell.org/ghc/
Gofer
Programación Declarativa
21
Otros lenguajes funcionales actuales
http://www.cs.kun.nl/~clean/
Ericsson Computer
Science Laboratory
http://www.erlang.org/
http://www.schemers.com
Programación Declarativa
22
Antecedentes históricos de la P.L. (I)
9 Años 30: el cálculo de predicados se desarrolla y evoluciona
hacia una forma de computación con el descubrimiento de
algoritmos que capturan el proceso de deducción de forma
sistemática,
9 La lógica de predicados se adopta como lenguaje declarativo
de especificación en computación.
9 Se considera la lógica de cláusulas de Horn.
9 Prawitz (1960) introduce la noción de unificación en la
demostración automática de teoremas.
9 J. Alan Robinson (1965) concreta la noción de unificación con
el descubrimiento del principio de resolución.
9 Luckham y Loveland introducen la resolución lineal.
Programación Declarativa
23
Antecedentes históricos de la P.L. (II)
9 Robert Kowalski (1973): La lógica de cláusulas
de Horn, con la resolución lineal, admite una
interpretación procedimental como un lenguaje
de programación.
9A. Colmerauer y Roussel (1973) crean, en la
universidad de Marsella, el primer intérprete del
lenguaje Prolog siguiendo las ideas de Kowalski.
9 David H.D. Warren (1977), en la universidad de
Alain Colmerauer Edimburgo, contruye el primer compilador de
Prolog para DEC-10.
9 David H.D. Warren (1983) crea la máquina de
Warren para simplificar la compilación de Prolog.
Programación Declarativa
24
Antecedentes históricos de la P.L. (III)
9 Finales 80 –Primeros 90:
Proyecto de la Quinta Generación
Concurrencia
9 Estándar ISO Prolog (1995)
9 Actualmente:
Compiladores optimizadores
Analizadores de código
Programación con restricciones
Orientación a objetos
Programación Web
Programación Declarativa
25
Lenguajes de programación lógica (I):
http://www.sics.se/quintus/
http://www.sics.se/isl/sicstuswww/site/index.html
SWI-Prolog
demo_xpce.pl
http://www.swi-prolog.org/
Programación Declarativa
26
Lenguajes de programación lógica (II):
http://www.icparc.ic.ac.uk/eclipse/
http://www.mozart-oz.org/
Programación Declarativa
27
Lenguajes de programación lógico-funcional:
Mercury
http://www.cs.mu.oz.au/research/mercury/
http://www.informatik.uni-kiel.de/~pakcs/
Programación Declarativa
28
Descargar