La Warren's Abstract Machine (Machine abstraite de Warren) est une machine virtuelle permettant d'implémenter le langage Prolog. Cette machine est composée d'un jeu d'instructions spécial ainsi que d'une mémoire. Elle a été définie par David H. D. Warren en 1983. Elle est une des implémentations classiques pour prolog.
Le jeu d'instructions de la WAM est composé de huit types d'instructions.
Ces instructions permettent la gestion de la coupure de prolog (prédicat !/0).
La mémoire de la machine WAM est séparée en cinq parties (depuis le bas de la mémoire) :
Soit le programme prolog suivant:
fille(anne). fille(claire). garcon(B) :- \+ fille(B).
Avec une implémentation basée sur la WAM, le code produit serait de la forme (en mini-assembleur WAM):
predicate(fille/1): switch_on_term(2,1,fail, fail,fail), label(1): switch_on_atom([(anne,3),(claire,5)]) label(2): try_me_else(4) label(3): get_atom(anne,0) proceed label(4): trust_me_else_fail label(5): get_atom(claire,0) proceed predicate(garcon/1): get_variable(x(1),0) put_structure(fille/1,0) unify_local_value(x(1)) execute((\+)/1))