programación declarativa - lcc.uma.esjmmb/declarativa/presentacion.pdf · programación...
Post on 15-Oct-2018
268 Views
Preview:
TRANSCRIPT
Programación Declarativa 1
Programación DeclarativaCurso 2004-2005
Ingeniería Técnica en Informática de GestiónDepartamento de Lenguajes y
Ciencias de la ComputaciónUniversidad de Málaga
Programación Declarativa 2
Profesorado
Programación Lógica y FuncionalJuan M. Molina Bravohttp://www.lcc.uma.es/~jmmbDespacho: 3.2.47Tutorías: Martes de 16:30 a 18:30
Miércoles de 10:45 a 12:45
Programación Declarativa 3
Horario
Lunes 12:45 a 14:45Miércoles 12:45 a 14:45
Con sesiones de laboratorio por determinardedicadas a clases prácticas en las que se avanza temario
Programación Declarativa 4
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 5
Software (Programación Funcional)
winhugsentorno de programación en Haskell para Windows
http://www.haskell.org/hugs/
Programación Declarativa 6
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. GallardoEd. Thomson , 2004.
“Introducción a la programación funcional con Haskell” (2ed)R. BirdEd. Prentice-Hall, 1999.
“The Craft of Functional Programming”S. ThompsonEd. Addison-Wesley, 1999.
Programación Declarativa 7
Bibliografía II (Programación Funcional)
Tutoriales y bibliografía disponible en internet
http://www.haskell.org/bookshelf/#tutorials
Programación Declarativa 8
Temario (Programación Lógica)
1. Principios de la programación lógica2. El lenguaje lógico Prolog3. Predicados extralógicos4. Programación lógica con estructuras5. Control en Prolog
Programación Declarativa 9
Software (Programación Lógica)
SWI-Prologentorno de programación Prologhttp://www.swi-prolog.org
SLD-Drawrepresentación de árboles SLDhttp://www.lcc.uma.es/~pacog/apuntes/pd
Programación Declarativa 10
Bibliografía I (programación lógica)
“The Art of Prolog” (2ed)Leon Sterling y Ehud ShapiroMIT Press, 1994
“Prolog Programming for Artificial Intelligence” (3ed)Ivan BratkoAddison-Wesley, 2000
“Clause and Effect”William F. ClocksinSpringer-Verlag, 1997
“Programación en Prolog” (2ed)William F. Clocksin y Chris S. MellishGustavo Gili, 1993
Programación Declarativa 11
Bibliografía II (programación lógica)
Libros gratuitos disponibles en internet:
“Prolog Programming: A First Course”Paul Brnahttp://cbl.leeds.ac.uk/~paul/prologbook/
“Logic, Programming and Prolog” (2ed)Ulf Nilsson y Jan Maluszynskihttp://www.ida.liu.se/~ulfni/lpp/
Programación Declarativa 12
Programación DeclarativaAntecedentes y evolución
Programación Declarativa 13
Programación Declarativa (p.d.)
La p.d. se caracteriza porque los programas describen relaciones entre objetos/valores;
pueden ser relaciones funcionales o relaciones más generales, ydejan 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.:
Programación Funcional (en Haskell)“Cómputo = Reducción de expresiones”
Programación Lógica (en Prolog)“Cómputo = Resolución de enunciados”
Programación Declarativa 14
Antecedentes históricos
Gottlob Frege (1848-1925),creador del cálculo de predicados
Gottlob Frege
Programación Declarativa 15
Antecedentes históricos (1928)
David Hilbert
Wilhelm Ackermann
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.
Programación Declarativa 16
Antecedentes históricos de la p. f. (1936)
Alonzo Church
A. Church desarrolla el cálculo lambda, teoría matemática de funciones recursivas.
“Calculabilidad efectiva” = expresable como función recursiva en dicho cálculo.
No existe algoritmo (def. mediante fun. rec.) que decida si dos expresiones cualesquiera del cálculo lambda son equivalentes o no.
Programación Declarativa 17
Antecedentes históricos (1936)
Alan Turing
A. Turing introduce la noción de máquina de Turing.Una computación es efectiva si la puede llevar a
cabo una máquina de Turing. 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 18
Antecedentes históricos de la p. f. : los 60
(J. McCarthy, 1960) Aparición del primer lenguaje funcional (impuro): LISP . Vinculación dinámica, sin orden superior, con características imperativas
(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.
John McCarthy
Programación Declarativa 19
Antecedentes históricos de la p. f. : de los 70 en adelante
(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.
(D. Turner, década de los 80) Desarrollo de los primeros lenguajes perezosos: Miranda.
(Finales de la década de los 80) Aparece la primera definición de Haskell desarrollada por un grupo de investigadores.
1999: Aparece la versión estable Haskell98.
Robin Milner
Programación Declarativa 20
Lenguajes funcionales actuales: Derivados/Implementaciones de ML
The Caml language
Standard MLof New Jersey
sml.net
http://www.smlnj.org
http://caml.inria.fr/
http://www.cl.cam.ac.uk/Research/TSG/SMLNET/
http://www.it-c.dk/research/mlkit/
Programación Declarativa 21
Lenguajes funcionales actuales: Implementaciones de Haskell
Gofer
http://www.haskell.org/
http://www.haskell.org/hugs/
http://www.haskell.org/ghc/
Programación Declarativa 22
Otros lenguajes funcionales actuales
Ericsson Computer Science Laboratory
http://www.schemers.com
http://www.cs.kun.nl/~clean/
http://www.erlang.org/
Programación Declarativa 23
Antecedentes históricos de la P.L. (I)
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,
La lógica de predicados se adopta como lenguaje declarativo de especificación en computación.
Se considera la lógica de cláusulas de Horn.Prawitz (1960) introduce la noción de unificación en la
demostración automática de teoremas.J. Alan Robinson (1965) concreta la noción de unificación con
el descubrimiento del principio de resolución.Luckham y Loveland introducen la resolución lineal.
Programación Declarativa 24
Antecedentes históricos de la P.L. (II)
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.
A. Colmerauer y Roussel (1973) crean, en la universidad de Marsella, el primer intérprete del lenguaje Prolog siguiendo las ideas de Kowalski.
David H.D. Warren (1977), en la universidad de Edimburgo, contruye el primer compilador de Prolog para DEC-10.
David H.D. Warren (1983) crea la máquina de Warren para simplificar la compilación de Prolog.
Alain Colmerauer
Programación Declarativa 25
Antecedentes históricos de la P.L. (III)
Finales 80 –Primeros 90:Proyecto de la Quinta GeneraciónConcurrencia
Estándar ISO Prolog (1995)
Actualmente:Compiladores optimizadoresAnalizadores de códigoProgramación con restriccionesOrientación a objetosProgramación Web
Programación Declarativa 26
Lenguajes de programación lógica (I):
http://www.sics.se/isl/sicstuswww/site/index.html
demo_xpce.pl
SWI-Prolog
http://www.swi-prolog.org/
http://www.sics.se/quintus/
Programación Declarativa 27
Lenguajes de programación lógica (II):
http://www.mozart-oz.org/
http://www.icparc.ic.ac.uk/eclipse/
Programación Declarativa 28
Lenguajes de programación lógico-funcional:
Mercury
http://www.cs.mu.oz.au/research/mercury/
http://www.informatik.uni-kiel.de/~pakcs/
top related