11
LENGUAJES LOGICO LENGUAJES LOGICO FUNCIONALESFUNCIONALES
REALIZADO PORREALIZADO POR
Taha BoureddanTaha Boureddan
22
INDICEINDICEIntroducción a la programación lógico-funcionalIntroducción a la programación lógico-funcionalAlgunos lenguajes lógico-funcionalesAlgunos lenguajes lógico-funcionalesOzOz
- Historia- Historia - Multiparadigma- Multiparadigma - Programación con restricciones- Programación con restricciones - Jerarquía de tipos - Jerarquía de tipos - Ejemplos- Ejemplos - ventajas- ventajas
Mozart Mozart MercuryMercury
- Historia - Historia - Tipos - Tipos - Determinismo- Determinismo - Ejemplos- Ejemplos - Ventajas- Ventajas
BibliografíaBibliografía
33
INTRODUCCION A LOS LENGUAJES INTRODUCCION A LOS LENGUAJES LOGICO-FUNCIONALESLOGICO-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.
44
INTRODUCCION A LOS LENGUAJES INTRODUCCION A LOS LENGUAJES LOGICO-FUNCIONALESLOGICO-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.
55
ALGUNOS LENGUAJES LOGICO ALGUNOS LENGUAJES LOGICO FUNCIONALESFUNCIONALES
OZOZ MOZART MOZART MERCURYMERCURY LIFELIFE TOYTOY
66
OZ HistoriaOZ HistoriaOZ fue originalmente desarrollado en el laboratorio OZ fue originalmente desarrollado en el laboratorio
de Programación de Sistemas en la Universidad de de Programación de Sistemas en la Universidad de Saarland por Saarland por Gert SmolkaGert Smolka y y sus estudiantes a comienzos sus estudiantes a comienzos de 1990de 1990. En 1996 el desarrollo de Oz continuó en . En 1996 el desarrollo de Oz continuó en cooperación con el grupo de investigación de cooperación con el grupo de investigación de Seif HaridiSeif Haridi en Instituto Sueco de Ciencias de la Computación. Desde en Instituto Sueco de Ciencias de la Computación. Desde 1999, Oz ha sido continuamente desarrollado por un grupo 1999, Oz ha sido continuamente desarrollado por un grupo internacional, el Consorcio Mozart, que estuvo compuesto internacional, el Consorcio Mozart, que estuvo compuesto originalmente por la Universidad de Saarland, el Instituto originalmente por la Universidad de Saarland, el Instituto Sueco de Ciencias de la Computación, y la Universidad Sueco de Ciencias de la Computación, y la Universidad Católica de Louvain. En 2005, la responsabilidad de Católica de Louvain. En 2005, la responsabilidad de gestionar el desarrollo de Mozart fue transferida aun gestionar el desarrollo de Mozart fue transferida aun grupo base, el Tablero Mozart, con el propósito expreso grupo base, el Tablero Mozart, con el propósito expreso de abrir el desarrollo de Mozart a una comunidad mayor.de abrir el desarrollo de Mozart a una comunidad mayor.
77
OZ HistoriaOZ Historia
Oz tiene una implementación de gran Oz tiene una implementación de gran calidad, el Sistema de Programación calidad, el Sistema de Programación Mozart, el cual fue liberado con una Mozart, el cual fue liberado con una licencia de Código Abierto por el licencia de Código Abierto por el Consorcio Mozart. Mozart ha sido Consorcio Mozart. Mozart ha sido portado a diferentes plataformas portado a diferentes plataformas como como UnixUnix, , FreeBSDFreeBSD, Linux, , Linux, Microsoft Windows, y Mac OS X.Microsoft Windows, y Mac OS X.
88
OZ HistoriaOZ Historia
Fue diseñado para hacer un avance Fue diseñado para hacer un avance moderno para las aplicaciones moderno para las aplicaciones concurrentes , inteligentes , de redes , concurrentes , inteligentes , de redes , tiempo real , paralelismo , interactivas y tiempo real , paralelismo , interactivas y reactivas .y para resolver aplicaciones reactivas .y para resolver aplicaciones complejas robusta y rápidamente.complejas robusta y rápidamente.
99
OZ MultiparadigmaOZ MultiparadigmaOz contiene una forma simple y bien hecha de la Oz contiene una forma simple y bien hecha de la
mayoría de los conceptos de los principales mayoría de los conceptos de los principales paradigmas de programación que son: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
1010
OZ :Programación con OZ :Programación con restriccionesrestricciones
Con respecto a la Programación con restricciones Con respecto a la Programación con restricciones la búsqueda es implementada de forma diferente a la búsqueda es implementada de forma diferente a como es había hecho en los lenguajes lógicos con como es había hecho en los lenguajes lógicos con restricciones , puesto que la búsqueda es programable . restricciones , puesto que la búsqueda es programable . Además en vez de seguir el típico enfoque de primero Además en vez de seguir el típico enfoque de primero en profundidad y de izquierda a derecha , las estrategias en profundidad y de izquierda a derecha , las estrategias de búsqueda están codificadas en los llamados de búsqueda están codificadas en los llamados procedimientos de búsqueda con lo que se explora en procedimientos de búsqueda con lo que se explora en espacio de soluciones . Además el computo puede ser espacio de soluciones . Además el computo puede ser suspendido o retrasado con respecto a las elecciones a suspendido o retrasado con respecto a las elecciones a realizar en el procedimiento de exploración , hasta que realizar en el procedimiento de exploración , hasta que el programador especifique explícitamente un el programador especifique explícitamente un procedimiento de búsqueda.procedimiento de búsqueda.
1111
OZ: JERARQUIA DE TIPOSOZ: JERARQUIA DE TIPOSEN 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
1212
OZ :ConcurrenciaOZ :Concurrencia
La concurrencia en OZ es muy eficiente y La concurrencia en OZ es muy eficiente y económico económico
La programación con hebras no es tan La programación con hebras no es tan pesada .pesada .
1313
EJEMPLO SIMPLE EN OZEJEMPLO SIMPLE EN OZ
El típico programa de El típico programa de “Hello World” en OZ “Hello World” en OZ seria así de simple seria así de simple
Se usa el editor de Se usa el editor de texto emacstexto emacs
1414
OZ ejemplo de concurrenciaOZ ejemplo de concurrenciaTARDA 7.5 SEGUNDOS EN CREAR 100000 HEBRAS
death --threads 100000 --times 10
1515
OZ: ejemplo de concurrenciaOZ: ejemplo de concurrencia El mismo programa en java tarda 2:30 min. pero con solo java Death 1000 10
1616
OZ VentajasOZ Ventajas
Implementa un modelo de programación Implementa un modelo de programación distribuido que hace a la red transparente. distribuido que hace a la red transparente.
Hace fácil programar aplicaciones abiertas y Hace fácil programar aplicaciones abiertas y tolerantes a fallos en el lenguaje. tolerantes a fallos en el lenguaje.
Introduce la idea de espacios de computación, Introduce la idea de espacios de computación, los cuales permiten búsquedas definidas por el los cuales permiten búsquedas definidas por el usuario y estrategias de distribución que son usuario y estrategias de distribución que son ortogonales al dominio de restricciones. ortogonales al dominio de restricciones.
1717
MOZARTMOZART
Es el resultado de 3 años de investigación Es el resultado de 3 años de investigación en la programación distribuida, y 10 años en la en la programación distribuida, y 10 años en la investigación en la programación concurrente .investigación en la programación concurrente .
fue desarrollado por:fue desarrollado por:DFKI (centro de investigación alemán para la DFKI (centro de investigación alemán para la
inteligencia artificial)inteligencia artificial)SICS (instituto sueco para las ciencias de SICS (instituto sueco para las ciencias de
computación)computación)UCL (universidad católica de Louvain)UCL (universidad católica de Louvain)
1818
MOZARTMOZART
MOZART en una implementación del MOZART en una implementación del lenguaje OZ, por tanto soporta los lenguaje OZ, por tanto soporta los paradigmas de OZ mencionados con paradigmas de OZ mencionados con anterioridad y Es un potente lenguaje para anterioridad y Es un potente lenguaje para trabajo en red, computación distribuida y trabajo en red, computación distribuida y posee una licencia libre. posee una licencia libre.
1919
MERCURY :HistoriaMERCURY :Historia
Es un lenguaje lógico funcional que esta basado el la Es un lenguaje lógico funcional que esta basado el la programación declarativa pura.programación declarativa pura.
Es un lenguaje de propósito general que fue diseñado Es un lenguaje de propósito general que fue diseñado para resolver aplicaciones del “mundo real” de forma para resolver aplicaciones del “mundo real” de forma robusta.robusta.
Fue desarrollado por Fue desarrollado por Fergus HendersonFergus Henderson, , Thomas Thomas Conway y Zoltan SomogyiConway y Zoltan Somogyi en la universidad de en la universidad de Melbourne el 8 de abril de 1995 .Melbourne el 8 de abril de 1995 .
Su sintaxis es parecida a la de Prolog con algunas Su sintaxis es parecida a la de Prolog con algunas declaraciones adicionales de tipos, modos, declaraciones adicionales de tipos, modos,
determinismodeterminismo ... ... Soporta el polimorfismo .Soporta el polimorfismo .
2020
MERCURY: TiposMERCURY: Tipos
Usa un sistema estático de chaqueo de tipos similar al Usa un sistema estático de chaqueo de tipos similar al de Haskell , pero también soporta tipificación dinámica de Haskell , pero también soporta tipificación dinámica ya que dispone del tipo universal (UNIV) esta definido en ya que dispone del tipo universal (UNIV) esta definido en la librería estándar en el modulo std_util, con la ayuda la librería estándar en el modulo std_util, con la ayuda de estos predicados 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.
2121
MERCURY: DeterminismoMERCURY: Determinismo
El determinismo en Mercury es El determinismo en Mercury es mediante categorías usando mediante categorías usando estos predicados:estos predicados:
2222
MERCURY: EjemplosMERCURY: Ejemplos
Hello World:Hello World:
Cada
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).
2323
MERCURY :EjemplosMERCURY :Ejemplos
Los números Los números de fibonacci:de fibonacci:
2424
MERCURY: EjemplosMERCURY: Ejemplos
DOG+ANT=CAT :DOG+ANT=CAT :
Aquí se ha usado el predicado
cc_multi porque con una solución
es suficiente
2525
MERCURY: Ejemplos MERCURY: Ejemplos (DOG+ANT=CAT)(DOG+ANT=CAT)
$ mmc −−make cryptMaking Mercury/int3s/crypt.int3Making Mercury/cs/crypt.cMaking Mercury/os/crypt.oMaking crypt$ ./cryptDOG + ANT = CAT420 + 531 = 951Success!
Una vez compilado y ejecutado :
2626
MERCURY: VentajasMERCURY: Ventajas
Es un lenguaje puro , comparado con Es un lenguaje puro , comparado con Prolog ,es mas declarativo puesto que Prolog ,es mas declarativo puesto que carece de declaraciones “extra-logicas" carece de declaraciones “extra-logicas" como “poda” y E/S imperativa .Permite como “poda” y E/S imperativa .Permite una optimizacion mejor del programa . una optimizacion mejor del programa . Gracias a estas optimizaciones debidas a Gracias a estas optimizaciones debidas a la pureza del programa , un programa la pureza del programa , un programa escrito en mercury es mas rapido que uno escrito en mercury es mas rapido que uno equivalente realizado en prolog.equivalente realizado en prolog.
2727
MERCURY: ProyectosMERCURY: Proyectos
Algunos de los proyectos que usan Mercury:Algunos de los proyectos que usan Mercury:• HAL Project: es un lenguaje lógico HAL Project: es un lenguaje lógico
funcional con restricciones realizado por la funcional con restricciones realizado por la universidad de Melbourne y de la universidad de universidad de Melbourne y de la universidad de Monash.Monash.
• Aditi Project Aditi Project : Es un lenguaje lógico para las : Es un lenguaje lógico para las bases de datos realizado por la universidad de bases de datos realizado por la universidad de
Melbourne.Melbourne.
2828
BIBLIOGRAFIABIBLIOGRAFIA
http://www.mozart-oz.org/documentation/dstutorial (la http://www.mozart-oz.org/documentation/dstutorial (la pagina oficial de mozart-oz).pagina oficial de mozart-oz).http://www.cs.mu.oz.au/research/mercury/http://www.cs.mu.oz.au/research/mercury/applications.html (Universidad de Melbourne applications.html (Universidad de Melbourne departamento de ciencias de la computación e departamento de ciencias de la computación e ingeniería de software).ingeniería de software).http://ltcs.uned.es:8080/aepia/Uploads/27/275.pdf http://ltcs.uned.es:8080/aepia/Uploads/27/275.pdf (Programación declarativa con restricciones por Antonio (Programación declarativa con restricciones por Antonio j. Fernández Universidad de Málaga).j. Fernández Universidad de Málaga).http://es.wikipedia.org/wiki/Lenguaje_de_programacihttp://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Oz %C3%B3n_Oz http://en.wikipedia.org/wiki/http://en.wikipedia.org/wiki/Mercury_programming_language .Mercury_programming_language .