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: :- module hello.

:- interface. :- import_module io. :- pred main (io::di, io::uo) is det. % signatura de 'main'

:- implementation. main(!IO):- % el prefix '!' indica variable d'estat que es desdobla en estat entrant i estat sortint io.write_string("Hola, Món!\n", !IO).

Adaptat de la guia (tutorial) de Ralph Becket.Tutorial de Mercury

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 :- module hailstone.

:- interface.

:- import_module int, list.

:- func hailstone(int) = list(int). :- pred hailstone(int::in, list(int)::out) is det.

:- implementation.

hailstone(N) = S:- hailstone(N, S).

hailstone(N, [N|S]):- (N = 1 -> S = [] ; N mod 2 = 0 -> hailstone(N/2, S) ; hailstone(3 * N + 1, S)).

:- end_module hailstone.

Referències

Enllaços externs Pàgina Oficial de Mercury

Categoria:Llenguatges de programació funcional