For your enjoyment: A more complete diagram of the Byrd Box Model

Here it is:

I have added the “Rollback” action and the “Decision Lozenge” on redo. The latter seems really necessary to account for the ability to have deterministic and semi-deterministic predicates. Or is done differently?

SWI-Prolog always creates a choice point for a call when in debug mode. That allows for retry. It also kills LCO. Often that is what you want during debugging. These debug choicepoints are not shown by the A command (and also not by the graphical debugger).


Don’t forget that unification of an attributed variable can “insert” a new goal at various points in the diagram.

Also that there are non-backtracking predicates (nb_setval/2 et al) that are unaffected by “rollback” …


The following link is dead.

I found this one instead.