2. 2
INDICEINDICE
Introducción a la programación lógico-funcionalIntroducción a la programación lógico-funcional
Algunos lenguajes lógico-funcionalesAlgunos lenguajes lógico-funcionales
OzOz
- Historia- Historia
- Multiparadigma- Multiparadigma
- Programación con restricciones- Programación con restricciones
- Jerarquía de tipos- Jerarquía de tipos
- Ejemplos- Ejemplos
- ventajas- ventajas
MozartMozart
MercuryMercury
- Historia- Historia
- Tipos- Tipos
- Determinismo- Determinismo
- Ejemplos- Ejemplos
- Ventajas- Ventajas
BibliografíaBibliografía
3. 3
INTRODUCCION A LOS LENGUAJESINTRODUCCION 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.
4. 4
INTRODUCCION A LOS LENGUAJESINTRODUCCION 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.
6. 6
OZ HistoriaOZ Historia
OZ fue originalmente desarrollado en elOZ fue originalmente desarrollado en el
laboratorio de Programación de Sistemas en lalaboratorio de Programación de Sistemas en la
Universidad de Saarland porUniversidad de Saarland por Gert SmolkaGert Smolka yy sussus
estudiantes a comienzos de 1990estudiantes a comienzos de 1990. En 1996 el. En 1996 el
desarrollo de Oz continuó en cooperación con eldesarrollo de Oz continuó en cooperación con el
grupo de investigación degrupo de investigación de Seif HaridiSeif Haridi en Institutoen Instituto
Sueco de Ciencias de la Computación. Desde 1999,Sueco de Ciencias de la Computación. Desde 1999,
Oz ha sido continuamente desarrollado por un grupoOz ha sido continuamente desarrollado por un grupo
internacional, el Consorcio Mozart, que estuvointernacional, el Consorcio Mozart, que estuvo
compuesto originalmente por la Universidad decompuesto originalmente por la Universidad de
Saarland, el Instituto Sueco de Ciencias de laSaarland, el Instituto Sueco de Ciencias de la
Computación, y la Universidad Católica de Louvain.Computación, y la Universidad Católica de Louvain.
En 2005, la responsabilidad de gestionar el desarrolloEn 2005, la responsabilidad de gestionar el desarrollo
de Mozart fue transferida aun grupo base, el Tablerode Mozart fue transferida aun grupo base, el Tablero
Mozart, con el propósito expreso de abrir elMozart, con el propósito expreso de abrir el
desarrollo de Mozart a una comunidad mayor.desarrollo de Mozart a una comunidad mayor.
7. 7
OZ HistoriaOZ Historia
Oz tiene una implementación de granOz tiene una implementación de gran
calidad, el Sistema de Programacióncalidad, el Sistema de Programación
Mozart, el cual fue liberado con unaMozart, el cual fue liberado con una
licencia de Código Abierto por ellicencia de Código Abierto por el
Consorcio Mozart. Mozart ha sidoConsorcio Mozart. Mozart ha sido
portado a diferentes plataformasportado a diferentes plataformas
comocomo UnixUnix,, FreeBSDFreeBSD, Linux,, Linux,
Microsoft Windows, y Mac OS X.Microsoft Windows, y Mac OS X.
8. 8
OZ HistoriaOZ Historia
Fue diseñado para hacer un avanceFue diseñado para hacer un avance
moderno para las aplicacionesmoderno para las aplicaciones
concurrentes , inteligentes , de redes ,concurrentes , inteligentes , de redes ,
tiempo real , paralelismo , interactivas ytiempo real , paralelismo , interactivas y
reactivas .y para resolver aplicacionesreactivas .y para resolver aplicaciones
complejas robusta y rápidamente.complejas robusta y rápidamente.
9. 9
OZ MultiparadigmaOZ Multiparadigma
Oz contiene una forma simple y bien hecha de laOz contiene una forma simple y bien hecha de la
mayoría de los conceptos de los principalesmayorí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
10. 10
OZ :Programación conOZ :Programación con
restriccionesrestricciones
Con respecto a la Programación con restricciones laCon respecto a la Programación con restricciones la
búsqueda es implementada de forma diferente a comobúsqueda es implementada de forma diferente a como
es había hecho en los lenguajes lógicos cones 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 primeroAdemás en vez de seguir el típico enfoque de primero
en profundidad y de izquierda a derecha , las estrategiasen profundidad y de izquierda a derecha , las estrategias
de búsqueda están codificadas en los llamadosde búsqueda están codificadas en los llamados
procedimientos de búsqueda con lo que se explora enprocedimientos de búsqueda con lo que se explora en
espacio de soluciones . Además el computo puede serespacio de soluciones . Además el computo puede ser
suspendido o retrasado con respecto a las elecciones asuspendido o retrasado con respecto a las elecciones a
realizar en el procedimiento de exploración , hasta querealizar en el procedimiento de exploración , hasta que
el programador especifique explícitamente unel programador especifique explícitamente un
procedimiento de búsqueda.procedimiento de búsqueda.
11. 11
OZ: JERARQUIA DE TIPOSOZ: 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
12. 12
OZ :ConcurrenciaOZ :Concurrencia
La concurrencia en OZ es muy eficiente yLa concurrencia en OZ es muy eficiente y
económicoeconómico
La programación con hebras no es tanLa programación con hebras no es tan
pesada .pesada .
13. 13
EJEMPLO SIMPLE EN OZEJEMPLO SIMPLE EN OZ
El típico programa deEl típico programa de
“Hello World” en OZ“Hello World” en OZ
seria así de simpleseria así de simple
Se usa el editor deSe usa el editor de
texto emacstexto emacs
14. 14
OZ ejemplo de concurrenciaOZ ejemplo de concurrencia
TARDA 7.5 SEGUNDOS EN CREAR 100000 HEBRAS
death --threads 100000 --times 10
15. 15
OZ: ejemplo de concurrenciaOZ: ejemplo de concurrencia
El mismo programa en java tarda 2:30 min. pero con solo java Death 1000 10
16. 16
OZ VentajasOZ Ventajas
Implementa un modelo de programaciónImplementa 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 yHace 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 ellos cuales permiten búsquedas definidas por el
usuario y estrategias de distribución que sonusuario y estrategias de distribución que son
ortogonales al dominio de restricciones.ortogonales al dominio de restricciones.
17. 17
MOZARTMOZART
Es el resultado de 3 años de investigaciónEs el resultado de 3 años de investigación
en la programación distribuida, y 10 años en laen 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 laDFKI (centro de investigación alemán para la
inteligencia artificial)inteligencia artificial)
SICS (instituto sueco para las ciencias deSICS (instituto sueco para las ciencias de
computación)computación)
UCL (universidad católica de Louvain)UCL (universidad católica de Louvain)
18. 18
MOZARTMOZART
MOZART en una implementación delMOZART en una implementación del
lenguaje OZ, por tanto soporta loslenguaje OZ, por tanto soporta los
paradigmas de OZ mencionados conparadigmas de OZ mencionados con
anterioridad y Es un potente lenguaje paraanterioridad y Es un potente lenguaje para
trabajo en red, computación distribuida ytrabajo en red, computación distribuida y
posee una licencia libre.posee una licencia libre.
19. 19
MERCURY :HistoriaMERCURY :Historia
Es un lenguaje lógico funcional que esta basado el laEs 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ñadoEs un lenguaje de propósito general que fue diseñado
para resolver aplicaciones del “mundo real” de formapara resolver aplicaciones del “mundo real” de forma
robusta.robusta.
Fue desarrollado porFue desarrollado por Fergus HendersonFergus Henderson,, ThomasThomas
Conway y Zoltan SomogyiConway y Zoltan Somogyi en la universidad deen 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 algunasSu 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 .
20. 20
MERCURY: TiposMERCURY: Tipos
Usa un sistema estático de chaqueo de tipos similar alUsa un sistema estático de chaqueo de tipos similar al
de Haskell , pero también soporta tipificación dinámicade Haskell , pero también soporta tipificación dinámica
ya que dispone del tipo universal (UNIV) esta definido enya que dispone del tipo universal (UNIV) esta definido en
la librería estándar en el modulo std_util, con la ayudala librería estándar en el modulo std_util, con la ayuda
de estos predicadosde 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.
21. 21
MERCURY: DeterminismoMERCURY: Determinismo
El determinismo en Mercury esEl determinismo en Mercury es
mediante categorías usandomediante categorías usando
estos predicados:estos predicados:
22. 22
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).
26. 26
MERCURY: VentajasMERCURY: Ventajas
Es un lenguaje puro , comparado conEs un lenguaje puro , comparado con
Prolog ,es mas declarativo puesto queProlog ,es mas declarativo puesto que
carece de declaraciones “extra-logicas"carece de declaraciones “extra-logicas"
como “poda” y E/S imperativa .Permitecomo “poda” y E/S imperativa .Permite
una optimizacion mejor del programa .una optimizacion mejor del programa .
Gracias a estas optimizaciones debidas aGracias a estas optimizaciones debidas a
la pureza del programa , un programala pureza del programa , un programa
escrito en mercury es mas rapido que unoescrito en mercury es mas rapido que uno
equivalente realizado en prolog.equivalente realizado en prolog.
27. 27
MERCURY: ProyectosMERCURY: Proyectos
Algunos de los proyectos que usan Mercury:Algunos de los proyectos que usan Mercury:
• HAL Project: es un lenguaje lógico funcionalHAL Project: es un lenguaje lógico funcional
con restricciones realizado por la universidadcon restricciones realizado por la universidad
de Melbourne y de la universidad de Monash.de Melbourne y de la universidad de Monash.
• Aditi ProjectAditi Project : Es un lenguaje lógico para las: Es un lenguaje lógico para las
bases de datos realizado por la universidad debases de datos realizado por la universidad de
Melbourne.Melbourne.
28. 28
BIBLIOGRAFIABIBLIOGRAFIA
http://www.mozart-oz.org/documentation/dstutorial (lahttp://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/applications.hthttp://www.cs.mu.oz.au/research/mercury/applications.ht
ml (Universidad de Melbourne departamento de cienciasml (Universidad de Melbourne departamento de ciencias
de la computación e ingeniería de software).de la computación e ingeniería de software).
http://ltcs.uned.es:8080/aepia/Uploads/27/275.pdfhttp://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/Mercury_programming_languhttp://en.wikipedia.org/wiki/Mercury_programming_langu
age .age .