Mercury (lenguaje)

lenguaje de programación

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)