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

Here it is:

https://raw.githubusercontent.com/dtonhofer/prolog_notes/master/pics/byrd_box_model/Byrd%20Box%20Model.svg

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).

3 Likes

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

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

2 Likes

The following link is dead.

I found this one instead.