Download Diapositiva 1 - Departamento de Lenguajes y Ciencias de la

Document related concepts

Mercury (lenguaje) wikipedia , lookup

Oz (lenguaje de programación) wikipedia , lookup

Programación funcional wikipedia , lookup

Philip Wadler wikipedia , lookup

Curry (lenguaje de programación) wikipedia , lookup

Transcript
LENGUAJES LOGICO
FUNCIONALES
REALIZADO POR
Taha Boureddan
1
INDICE
Introducción a la programación lógico-funcional
Algunos lenguajes lógico-funcionales
Oz
- Historia
- Multiparadigma
- Programación con restricciones
- Jerarquía de tipos
- Ejemplos
- ventajas
Mozart
Mercury
- Historia
- Tipos
- Determinismo
- Ejemplos
- Ventajas
Bibliografía
2
INTRODUCCION A LOS LENGUAJES
LOGICO-FUNCIONALES
Los lenguajes de programación lógico funcionales integran algunas
de las mejores carácterısticas de los paradigmas declarativos clasicos ,en
concreto:
•
la programacion logica
•
la programacion funcional.
Cada uno de estos estilos tiene diferentes ventajas con respecto a sus
aplicaciones practicas.
 Los lenguajes funcionales proporcionan :
_- Facilidades de abstracción sofisticadas.
- Sistemas de módulos.
- Soluciones “puras” para la integración de facilidades de I/O en la
programación declarativa.
- Además de técnicas y estrategias eficientes para la ejecución de los
programas.
3
INTRODUCCION A LOS LENGUAJES
LOGICO-FUNCIONALES
 Los lenguajes lógicos permiten :
- La computación con información parcial .
- Están provistos de facilidades de búsqueda de soluciones.
Sin embargo, se ha demostrado que las ventajas de estos
estilos pueden combinarse de manera efectiva y útil sobre un
lenguaje único. Los lenguajes lógico funcionales modernos
ofrecen carácterısticas de ambos estilos. La semántica
operacional de los lenguajes integrados esta usualmentebasada
en narrowing, una combinación de la unificación y reducción
como mecanismo de evaluación que subsume a la reescritura y
a a SLD-resolución.
4
ALGUNOS LENGUAJES LOGICO
FUNCIONALES





OZ
MOZART
MERCURY
LIFE
TOY
5
OZ Historia
OZ fue originalmente desarrollado en el
laboratorio de Programación de Sistemas en la
Universidad de Saarland por Gert Smolka y sus
estudiantes a comienzos de 1990. En 1996 el
desarrollo de Oz continuó en cooperación con el
grupo de investigación de Seif Haridi en Instituto
Sueco de Ciencias de la Computación. Desde 1999,
Oz ha sido continuamente desarrollado por un grupo
internacional, el Consorcio Mozart, que estuvo
compuesto originalmente por la Universidad de
Saarland, el Instituto Sueco de Ciencias de la
Computación, y la Universidad Católica de Louvain.
En 2005, la responsabilidad de gestionar el desarrollo
de Mozart fue transferida aun grupo base, el Tablero
Mozart, con el propósito expreso de abrir el
desarrollo de Mozart a una comunidad mayor.
6
OZ Historia
Oz tiene una implementación de gran
calidad, el Sistema de Programación
Mozart, el cual fue liberado con una
licencia de Código Abierto por el
Consorcio Mozart. Mozart ha sido
portado a diferentes plataformas
como Unix, FreeBSD, Linux,
Microsoft Windows, y Mac OS X.
7
OZ Historia
Fue diseñado para hacer un avance
moderno para las aplicaciones
concurrentes , inteligentes , de redes ,
tiempo real , paralelismo , interactivas y
reactivas .y para resolver aplicaciones
complejas robusta y rápidamente.
8
OZ Multiparadigma
Oz contiene una forma simple y bien hecha de la
mayoría de los conceptos de los principales
paradigmas de programación que son:
Programación lógica
Programación funcional
Programación imperativa
Programación orientada a objetos
Programación concurrente
Programación distribuida
Programación con restricciones
9
OZ :Programación con
restricciones
Con respecto a la Programación con restricciones la
búsqueda es implementada de forma diferente a como
es había hecho en los lenguajes lógicos con
restricciones , puesto que la búsqueda es programable .
Además en vez de seguir el típico enfoque de primero
en profundidad y de izquierda a derecha , las estrategias
de búsqueda están codificadas en los llamados
procedimientos de búsqueda con lo que se explora en
espacio de soluciones . Además el computo puede ser
suspendido o retrasado con respecto a las elecciones a
realizar en el procedimiento de exploración , hasta que
el programador especifique explícitamente un
procedimiento de búsqueda.
10
OZ: JERARQUIA DE TIPOS
EN OZ
Es un sistema de tipificación
dinámico
El tipo de datos Chunk permite
que los usuarios introduzcan
nuevos tipos de datos
abstractos.
FDInt es un tipo de dominio finito
que se utiliza en la programación
con restricciones
11
OZ :Concurrencia
La concurrencia en OZ es muy eficiente y
económico
La programación con hebras no es tan
pesada .
12
EJEMPLO SIMPLE EN OZ
El típico programa de
“Hello World” en OZ
seria así de simple
Se usa el editor de
texto emacs
13
OZ ejemplo de concurrencia
TARDA 7.5 SEGUNDOS EN CREAR 100000 HEBRAS
death --threads 100000 --times 10
14
OZ: ejemplo de concurrencia
El mismo programa en java tarda 2:30 min. pero con solo java Death 1000 10
15
OZ Ventajas
Implementa un modelo de programación
distribuido que hace a la red transparente.
 Hace fácil programar aplicaciones abiertas y
tolerantes a fallos en el lenguaje.
 Introduce la idea de espacios de computación,
los cuales permiten búsquedas definidas por el
usuario y estrategias de distribución que son
ortogonales al dominio de restricciones.

16
MOZART
Es el resultado de 3 años de investigación
en la programación distribuida, y 10 años en la
investigación en la programación concurrente .
fue desarrollado por:
DFKI (centro de investigación alemán para la
inteligencia artificial)
SICS (instituto sueco para las ciencias de
computación)
UCL (universidad católica de Louvain)
17
MOZART
MOZART en una implementación del
lenguaje OZ, por tanto soporta los
paradigmas de OZ mencionados con
anterioridad y Es un potente lenguaje para
trabajo en red, computación distribuida y
posee una licencia libre.
18
MERCURY :Historia
 Es un lenguaje lógico funcional que esta basado el la
programación declarativa pura.
 Es un lenguaje de propósito general que fue diseñado
para resolver aplicaciones del “mundo real” de forma
robusta.
 Fue desarrollado por Fergus Henderson, Thomas
Conway y Zoltan Somogyi en la universidad de
Melbourne el 8 de abril de 1995 .
 Su sintaxis es parecida a la de Prolog con algunas
declaraciones adicionales de tipos, modos,
determinismo ...
 Soporta el polimorfismo .
19
MERCURY: Tipos
 Usa un sistema estático de chaqueo de tipos similar al
de Haskell , pero también soporta tipificación dinámica
ya que dispone del tipo universal (UNIV) esta definido en
la librería estándar en el modulo std_util, con la ayuda
de estos predicados type_to_univ/2 y univ_to_type/2
se puede convertir un tipo en universal y viceversa , este
tipo universal es usado en situaciones en las que se
necesita colecciones heterogéneas.
20
MERCURY: Determinismo
El determinismo en Mercury es
mediante categorías usando
estos predicados:
21
MERCURY: Ejemplos
Hello World:
Todos los programas
Mercury necesitan del
Cada
predicado
main para tomarlo
como punto de partida .
El main tiene 2 argumentos
di de entrada y ou de salida.
Is det es un predicado
determinista (siempre da la
misma salida).
22
MERCURY :Ejemplos
Los números
de fibonacci:
23
MERCURY: Ejemplos
DOG+ANT=CAT :
Aquí se ha usado
el predicado
cc_multi porque
con una solución
es suficiente
24
MERCURY: Ejemplos
(DOG+ANT=CAT)
Una vez compilado y ejecutado :
$ mmc −−make crypt
Making Mercury/int3s/crypt.int3
Making Mercury/cs/crypt.c
Making Mercury/os/crypt.o
Making crypt
$ ./crypt
DOG + ANT = CAT
420 + 531 = 951
Success!
25
MERCURY: Ventajas
Es un lenguaje puro , comparado con
Prolog ,es mas declarativo puesto que
carece de declaraciones “extra-logicas"
como “poda” y E/S imperativa .Permite
una optimizacion mejor del programa .
Gracias a estas optimizaciones debidas a
la pureza del programa , un programa
escrito en mercury es mas rapido que uno
equivalente realizado en prolog.
26
MERCURY: Proyectos
Algunos de los proyectos que usan Mercury:
•
HAL Project: es un lenguaje lógico funcional
con restricciones realizado por la universidad
de Melbourne y de la universidad de Monash.
•
Aditi Project : Es un lenguaje lógico para las
bases de datos realizado por la universidad de
Melbourne.
27
BIBLIOGRAFIA
http://www.mozart-oz.org/documentation/dstutorial (la
pagina oficial de mozart-oz).
http://www.cs.mu.oz.au/research/mercury/applications.ht
ml (Universidad de Melbourne departamento de ciencias
de la computación e ingeniería de software).
http://ltcs.uned.es:8080/aepia/Uploads/27/275.pdf
(Programación declarativa con restricciones por Antonio
j. Fernández Universidad de Málaga).
http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C
3%B3n_Oz
http://en.wikipedia.org/wiki/Mercury_programming_langu
age .
28