Mercury (langage)
Mercury | ||
Date de première version | ||
---|---|---|
Paradigmes | Programmation logique | |
Auteur | Zoltan Somogyi | |
Dernière version | 22.01.8 ()[1] | |
Typage | Fort, statique | |
Influencé par | Prolog | |
Système d'exploitation | Multiplate-forme | |
Licence | Licence publique générale GNU | |
Site web | http://mercurylang.org | |
Extension de fichier | m | |
modifier |
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[2].
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[3],[4]. Ceci a permis a ses auteurs d'appeler Mercury "Le langage de programmation logique le plus rapide du monde" [2].
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.
Exemple
[modifier | modifier le code]Calcul des nombres de Fibonacci[5] :
:- 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]- Alice
- Logtalk
- Oz et son compilateur Mozart.
- Visual Prolog
Références
[modifier | modifier le code]- « Release 22.01.8 », (consulté le )
- The Mercury Project - Motivation
- The Mercury Project - Benchmarks
- (en) Zoltan Somogyi, « The execution algorithm of Mercury: an efficient purely declarative logic programming language », Journal of Logic Programming, vol. 29, nos 1–3, october–december 1996, p. 17–64 (DOI 10.1016/S0743-1066(96)00068-4, lire en ligne, consulté le )
- d'après « Ralph Becket's Mercury tutorial »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?) (consulté le )