Warren Abstract Machine

In 1983, David H. D. Warren designed an abstract machine for the execution of Prolog consisting of a memory architecture and an instruction set.

[1][2][3] This design became known as the Warren Abstract Machine (WAM) and has become the de facto standard target for Prolog compilers.

In order to write efficient Prolog programs, a basic understanding of how the WAM works can be advantageous.

Some of the most important WAM concepts are first argument indexing and its relation to choice-points, tail call optimization, and memory reclamation on failure.

The WAM has the following memory areas: Here is a piece of Prolog code: A WAM-based Prolog compiler will compile this into WAM instructions similar to the following: An important characteristic of this code is its ability to cope with the various modes in which the predicates can be evoked: any argument might be a variable, a ground term, or a partly instantiated term.