Tipus | llenguatge de programació, llenguatge de programació funcional, llenguatge de programació orientat a objectes, llenguatge de programació purament funcional i llenguatge de programació multiparadigma ![]() |
---|---|
Data de creació | 8 abril 1995 ![]() |
Desenvolupador | Universitat de Melbourne ![]() |
Paradigma de programació | programació lògica, programació orientada a objectes, programació funcional, programació multiparadigma i purely functional programming (en) ![]() ![]() |
Darrera versió estable | 22.01.8 () ![]() |
Influenciat per | Prolog, Haskell i Hope ![]() |
Extensió dels fitxers | m ![]() |
Codi font | Codi font ![]() |
Llicència | GNU General Public License ![]() |
Etiqueta d'Stack Exchange | Etiqueta ![]() |
Pàgina web | mercurylang.org ![]() |
Mercury[1] és un llenguatge de programació lògic-funcional dirigit a aplicacions del món real.[2] 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.
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.[3][4]
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.
Mercury té diversos rerefons de compilació (ang:back-ends), que permeten compilar codi Mercury als següents llenguatges i màquines virtuals:
(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.
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.[5]
La sintaxi de clàusules deriva del llenguatge Prolog
:- 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.