Title: LENGUAJES LOGICO FUNCIONALES
1LENGUAJES LOGICO FUNCIONALES
- REALIZADO POR
- Taha Boureddan
2INDICE
- 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
3INTRODUCCION A LOS LENGUAJES LOGICO-FUNCIONALES
- Los lenguajes de programación lógico
funcionales integran algunas de las mejores
carácteristicas 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. -
4INTRODUCCION 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ácteristicas 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.
5ALGUNOS LENGUAJES LOGICO FUNCIONALES
- OZ
- MOZART
- MERCURY
- LIFE
- TOY
6OZ 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.
7OZ 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.
8OZ 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.
9OZ 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
10OZ 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.
11OZ 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
12OZ Concurrencia
- La concurrencia en OZ es muy eficiente y
económico - La programación con hebras no es tan pesada .
13EJEMPLO SIMPLE EN OZ
- El típico programa de Hello World en OZ seria
así de simple - Se usa el editor de texto emacs
14OZ ejemplo de concurrencia
TARDA 7.5 SEGUNDOS EN CREAR 100000 HEBRAS
death --threads 100000 --times 10
15OZ ejemplo de concurrencia
El mismo programa en java tarda 230 min. pero
con solo java Death 1000 10
16OZ 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.
17MOZART
- 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)
18MOZART
- 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.
19MERCURY 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 .
20MERCURY 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.
21MERCURY Determinismo
- El determinismo en Mercury es mediante categorías
usando estos predicados
22MERCURY Ejemplos
- Todos los programas Mercury necesitan del
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).
Cada
23MERCURY Ejemplos
24MERCURY Ejemplos
Aquí se ha usado el predicado cc_multi porque con
una solución es suficiente
25MERCURY Ejemplos (DOGANTCAT)
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!
26MERCURY 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.
27MERCURY 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.
-
28BIBLIOGRAFIA
- http//www.mozart-oz.org/documentation/dstutorial
(la pagina oficial de mozart-oz). - http//www.cs.mu.oz.au/research/mercury/applicatio
ns.html (Universidad de Melbourne departamento de
ciencias de la computación e ingeniería de
software). - http//ltcs.uned.es8080/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_programac
iC3B3n_Oz - http//en.wikipedia.org/wiki/Mercury_programming_l
anguage .