Mercury (langage)

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Mercury
Auteur Zoltan Somogyi
Paradigmes Programmation logique
Typage Fort, statique
Influencé par Prolog
Système d'exploitation Multiplate-forme
Site web http://www.mercury.csse.unimelb.edu.au

Mercury est un langage de programmation fonctionnel et surtout logique, développé à l'Université de Melbourne, Australie. Mercury est déclaratif. Il a été inspiré par Prolog (pour la partie logique) et, dans une moindre mesure, Haskell pour la partie fonctionnelle[1].

Mercury a une syntaxe et un mode de fonctionnement proches du langage Prolog. Cependant, il permet l'addition de types et de modes qui guident le compilateur dans la génération de code efficace[2],[3]. Ceci a permis a ses auteurs d'appeler Mercury "Le langage de programmation logique le plus rapide du monde" [1].


Mercury n'inclut pas le "cut" et les entrées-sorties de Prolog, car elles ne sont pas déclaratives. En Mercury, le code non déclaratif doit être explicitement marqué comme tel. Les entrées-sorties utilisent un système de types linéaire.

Mission Critical IT [1], une société de services en ingénierie informatique (SSII) belge, utilise Mercury depuis 2000 dans des applications commerciales.

Exemple[modifier | modifier le code]

Calcul des nombres de Fibonacci ([4]):

 :- module fib.
 :- interface.
 :- import_module io.
 :- pred main(io::di, io::uo) is det.
 
 :- implementation.
 :- import_module int.

 :-func fib(int) = int.
 fib(N) = (if N =< 2 then 1 else fib(N - 1) + fib(N - 2)).

 main(!IO) :-
        io.write_string("fib(10) = ", !IO),
        io.write_int(fib(10), !IO),
        io.nl(!IO).
        % Could instead use io.format("fib(10) = %d\n", [i(fib(10))], !IO).

On y voit les modes (di, uo, det) et les types (int).

Voir aussi[modifier | modifier le code]

Références[modifier | modifier le code]

  1. a et b The Mercury Project - Motivation
  2. The Mercury Project - Benchmarks
  3. (en) Zoltan Somogyi, « The execution algorithm of Mercury: an efficient purely declarative logic programming language », Journal of Logic Programming, vol. 29, no 1–3,‎ October–December 1996, p. 17–64 (DOI 10.1016/S0743-1066(96)00068-4, lire en ligne)
  4. d'après « Ralph Becket's Mercury tutorial » (ArchiveWikiwixArchive.isGoogleQue faire ?). Consulté le 2013-04-13

Liens externes[modifier | modifier le code]