Mercury is a functional logic programming language based on Prolog, but more geared towards practical applications.
Mercury has several features intended for better software engineering than is possible with Prolog. It is compiled rather than interpreted, as is traditional for logic programming languages. It features a sophisticated, strict type and mode system. Its authors claim these features combined with logic programming's abstract nature speeds writing of reliable programs. Mercury's module system enables division into self-contained units, a problem for past logic programming languages. (But note that several existing Prolog implementations also include module systems.)
Mercury is a more "pure", and therefore more declarative, language than Prolog, since it does not have "extra-logical" Prolog features like the "cut" (a Prolog construct which prevents backtracking) and imperative I/O. This makes the coding of sequential algorithms somewhat more cumbersome, but it makes automated program optimization easier.
Hello World in Mercury:
:- module hello. :- interface. :- import_module io. :- pred main(io.state, io.state). :- mode main(di, uo) is det. :- implementation. main(!IO) :- io.write_string("Hello, World!\n", !IO).
(adapted from Ralph Becket's Mercury tutorial).
Mercury is developed at the University Of Melbourne Computer Science department under the supervision of Zoltan Somogyi.
Mercury is still highly experimental, and virtually unused outside the team of its creators.