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.