This directory contains some example Mercury programs.
-
hello.m -- "Hello World" in Mercury.
-
cat.m -- An implementation of a simple version of the standard UNIX filter
cat
, which just copies its input files or the standard input stream to the standard output stream. -
sort.m -- An implementation of a simple version of the standard UNIX filter
sort
, which reads lines from its input file or the standard input stream, sorts them, and then writes the result to its output file or the standard output stream. -
calculator.m -- A simple four-function arithmetic calculator, with a parser written using Definite Clause Grammar (DCG) notation.
-
calculator2.m -- A simple four-function arithmetic calculator, which uses the
mercury_term_parser
module in the standard library with a user-defined operator precedence table. -
interpreter.m -- An simple interpreter for definite logic programs. A demonstration of meta-programming in Mercury.
-
expand_terms.m -- Another example meta-program, showing how to emulate Prolog's
expand_term
mechanism. -
e.m -- A small program which calculates the base of natural logarithms to however many digits you choose. It illustrates one way to achieve lazy evaluation in Mercury.
-
eliza.m -- An implementation of the famous computer psychotherapist.
-
beer.m -- A small program that prints the lyrics of the song "99 Bottle of Beer".
-
mcowsay.m -- A Mercury version of the
cowsay
program. It prints an ASCII art picture of a cow together with a user-supplied message. -
Mmakefile -- The file used by
mmake
, the Mercury Make program, to build the programs in this directory.
The solutions sub-directory contains some examples of the use of nondeterminism, showing how a Mercury program can compute
- one solution,
- all solutions, or
- some solutions (determined by a user-specified criteria)
for a query which has more than one logically correct answer.
The concurrency sub-directory contains examples of how to use Mercury's concurrency interface, i.e. using threads in Mercury programs.
There are also some sub-directories which contain examples of multi-module Mercury programs:
-
appengine -- A simple Google App Engine servlet.
-
diff -- This directory contains an implementation of a simple version of the standard UNIX utility
diff
, which prints the differences between two files. -
c_interface -- This directory contains some examples of mixed Mercury/C/C++/Fortran programs using the C interface.
-
csharp_interface -- This directory contains some examples of mixed Mercury/C# programs using the foreign language interface.
-
java_interface -- This directory contains some examples of mixed Mercury/Java programs using the foreign language interface.
-
rot13 -- This directory contains a few implementations of rot-13 encoding.
-
muz -- This directory contains a syntax checker / type checker for the specification language Z.
-
solver_types -- This directory contains an example of a simple constraint solver implemented using solver types.
-
lazy_list -- This directory contains an example of how the
lazy
module in the standard library can be used to implement a lazy data structure, in this case a lazy list.