# Mercury

* Per a altres significats, vegeu «Mercury (desambiguació)».
Mercury és un llenguatge de programació lògic-funcional dirigit a aplicacions del món real. Està desenvolupat a la Universitat de Melbourne sota la supervisió de Zoltan Somogyi. La primera versió va ser desenvolupada per Fergus Henderson, Thomas Conway i Zoltan Somogyi i va ser editada l'abril del 1995.

## Característiques

Mercury té diverses característiques adreçades a una millor enginyeria de software. És compilat i no interpretat. Presenta un sofisticat i estricte sistema de tipus i modes. Els seus autors proclamen que aquestes característiques, combinades amb la natura abstracta de la programació lògica i la divisió en mòduls, faciliten l'escriptura ràpida de programes fiables.
Mercury és més pur i més declaratiu que Prolog, car no té les instruccions extra-lògiques de Prolog tal com cut (que evita el backtracking) i l'entrada/sortida imperativa. Això permet una millor optimització dels programes, però fa que la codificació d'algorismes seqüencials sigui més complicada. Gràcies a les optimitzacions, els programes escrits en Mercury són significativament més ràpids que els equivalents escrits en Prolog.
Mercury està disponible per a la majoria de plataformes Unix, Mac OS X, i MS-Windows.
Programes notables escrits en Mercury inclouen el compilador Mercury, la base de dades deductiva Aditi i el programa de formatació Prince XML.

## Rerefons

Mercury té diversos rerefons de compilació (ang:back-ends), que permeten compilar codi Mercury als següents llenguatges i màquines virtuals:
* Llenguatge C de baix nivell per a GNU Compiler Collection (GCC) (el rerefons original de Mercury).
* Llenguatge C d'alt nivell.
* Common Intermediate Language (IL) per a.NET (CLR).
* Java bytecode per a JVM.
* Assembler via el rerefons GCC.
(els tres darrers encara de qualitat incompleta)
Mercury també s'ha emprat en Aditi, una base de dades deductiva desenvolupada a la Universitat de Melbourne.
Mercury té una interfase de llenguatges forans, que permet enllaçar amb codi escrit en altres llenguatges de programació. Són els següents:
| Rerefons | Llenguatge(s) forans |
| C (both levels) | C |
| IL | IL, C# or Managed C++ |
| Java | Java |
Per a altres llenguatges cal encadenar-los des dels mencionats. Tanmateix això vol dir que el codi forà pot caldre reescriure'l per als diferents rerefons, altrament la portabilitat entre rerefons es perdria.

## Example: Hola món

Hola món en Mercury:
Adaptat de la guia (tutorial) de Ralph Becket.
La sintaxi de clàusules deriva del llenguatge Prolog
* el separador de seqüència és la coma indicant conjunció d'objectius
* el separador d'alternatives és el punt-i-coma indicant disjunció d'objectius

## Referències

* ↑ «The Mercury Project: Home». [Consulta: 23 desembre 2023].
* ↑ «The Mercury Project: Papers and Presentations». [Consulta: 23 desembre 2023].
* ↑ «The Mercury Project: Benchmarks». [Consulta: 23 desembre 2023].
* ↑ Somogyi, Zoltan; Henderson, Fergus; Conway, Thomas «The execution algorithm of Mercury: an efficient purely declarative logic programming language». Journal of Logic Programming. Mercurylang.org, 1–3, 01-10-1996, pàg. 17–64. DOI: 10.1016/S0743-1066(96)00068-4.
* ↑ Tutorial de Mercury (anglès)

## Enllaços externs

* Pàgina Oficial de Mercury (anglès)
Viccionari