Mercury (lenguaje)

De Wikipedia, la enciclopedia libre

Mercury es un lenguaje de programación lógico-funcional, es decir, integra "soluciones puras" y computación con información parcial. [1]

Historia[editar]

Es un lenguaje lógico funcional que está basado en la programación declarativa pura, 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; la sintaxis es parecida a la de Prolog y soporta polimorfismo.

Tipificación de datos[editar]

Usa un sistema estático de chequeo de tipos similar al de Haskell, pero también soporta tipificación dinámica ya que dispone del tipo universal (UNIV), está definido en la librería estándar en el módulo 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.

Determinismo[editar]

El determinismo en Mercury se define mediante categorías usando estos predicados:

Categorías Número de Soluciones det 1 semidet <=1 multi >=1 nondet >=0 failure 0

Ventajas[editar]

Es un lenguaje que, comparado con Prolog, es más puramente declarativo puesto que carece de declaraciones «extra-lógicas» como «poda» y E/S imperativa. Permite una optimización mejor del programa. Gracias a estas optimizaciones debidas a la pureza del programa, un programa escrito en Mercury es más rápido que uno equivalente realizado en Prolog.

Proyectos[editar]

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.


Referencias[editar]

  1. Zoltan Somogyi, Fergus Henderson and Thomas Conway.The execution algorithm of Mercury: an efficient purely declarative logic programming language. Journal of Logic Programming, volumen 29, Nº 1-3, octubre-diciembre de 1996, Páginas 17-64. (en inglés)