programación declarativa - lcc.uma.esjmmb/declarativa/presentacion.pdf · programación...

28
Programación Declarativa 1 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

Upload: duongthien

Post on 15-Oct-2018

262 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 2: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 3: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 4: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 5: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

Programación Declarativa 5

Software (Programación Funcional)

winhugsentorno de programación en Haskell para Windows

http://www.haskell.org/hugs/

Page 6: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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.

Page 7: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

Programación Declarativa 7

Bibliografía II (Programación Funcional)

Tutoriales y bibliografía disponible en internet

http://www.haskell.org/bookshelf/#tutorials

Page 8: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 9: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 10: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 11: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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/

Page 12: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

Programación Declarativa 12

Programación DeclarativaAntecedentes y evolución

Page 13: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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”

Page 14: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

Programación Declarativa 14

Antecedentes históricos

Gottlob Frege (1848-1925),creador del cálculo de predicados

Gottlob Frege

Page 15: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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.

Page 16: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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.

Page 17: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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.

Page 18: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 19: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 20: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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/

Page 21: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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/

Page 22: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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/

Page 23: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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.

Page 24: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 25: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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

Page 26: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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/

Page 27: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

Programación Declarativa 27

Lenguajes de programación lógica (II):

http://www.mozart-oz.org/

http://www.icparc.ic.ac.uk/eclipse/

Page 28: Programación Declarativa - lcc.uma.esjmmb/declarativa/Presentacion.pdf · Programación Declarativa 1 Programación Declarativa Curso 2004-2005 Ingeniería Técnica en Informática

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/