Warren's Abstract Machine (WAM) wurde 1983 von David H. D. Warren spezifiziert. Es handelt sich dabei um einen idealen Prozessor, dessen Maschinensprache als Zielsprache für Prolog-Übersetzer oder -Interpreter dient.
Man spricht auch von einer virtuellen Maschine, da es den WAM Prozessor nicht real (z.B. in Silizium gefertigt) gibt, sondern nur als Software.
Ist ein Prolog Programm in WAM Code übersetzt worden, so kann dieser Code von einer WAM Implementierung auf dem Laufzeitsystem ausgeführt werden, also einem WAM Interpreter, der diesen idealen Prozessor simuliert.
Oder der WAM Code wird, wie bei GNU Prolog, als Zwischencode benutzt, der wiederum in einen weiteren Zwischencode namens mini-assembly übersetzt wird, bevor daraus die Maschinensprache des Zielprozessors generiert wird.