Skip to content

Latest commit

 

History

History
 
 

samples

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_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.