Assuming I have:
makeTillDone(X) :- try(X).
makeTillDone(X1) :- changeOne(X1, X2), makeTillDone(X2).
makeTillDOne(X1) :- changeTwo(X1, X2), makeTillDone(X2).
prolog will try to satisfy makeTillDone(X) in sequence:
try(X),
ChangeOne(X1, X2), makeTillDone(X2) -> try(X)
ChangeOne(X1, X2), makeTillDone(X2) -> changeOne(X3, X4), makeTillDone(X4) -> try(X)
etc
how can I achieve more uniform backtracking:
try(X),
ChangeOne(X1, X2), makeTillDone(X2) -> try(X)
ChangeTwo(X1, X2), makeTillDone(X2) -> try(X)
ChangeOne(X1, X2), makeTillDone(X2) -> changeOne(X3, X4), makeTillDone(X4) -> try(X)
changeOne(X1, X2), makeTillDone(X2) -> changeTwo(X3, X4), makeTillDone(X4) -> try(X)
etc