and was expecting my trace to show a final redo and fail but for some
reason it did not.
transcript and program follow
/* Transcript */
[debug] ?- trace.
Yes
[trace] ?- edible(X).
Call: (7) edible(_G302) ?
Exit: (7) edible(apple) ?
X = apple ;
Redo: (7) edible(_G302) ?
Exit: (7) edible(crackers) ? creep
X = crackers ;
No
[debug] ?-
/* Program */
edible(apple).
edible(crackers).
The prolog runtime keeps track of choice points, and knows, that no
further choicepoint exists. Actually having unnecessary choicepoints
costs memory.