Mercury Sample Programs
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_parsermodule 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_termmechanism. -
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
cowsayprogram. 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
lazymodule in the standard library can be used to implement a lazy data structure, in this case a lazy list.