Слишком много отступлений: почему здесь «повтор»?

Я делаю очень простое упражнение в Прологе, и в этом есть что-то, чего я не понимаю. Программа «больше, чем» (>) на целые числа, представленные как наследники:

greater_than(succ(_), 0).
greater_than(succ(A), succ(B)) :-
  greater_than(A, B).

Моя проблема: я не понимаю, почему запросgreater_than(succ(succ(succ(0))),succ(0)) генерируетredo в следующем следе:

[trace] ?- greater_than(succ(succ(succ(0))),succ(0)).
Call: (6) greater_than(succ(succ(succ(0))), succ(0)) ? creep
Call: (7) greater_than(succ(succ(0)), 0) ? creep
Exit: (7) greater_than(succ(succ(0)), 0) ? creep
Exit: (6) greater_than(succ(succ(succ(0))), succ(0)) ? creep
true ;
Redo: (7) greater_than(succ(succ(0)), 0) ? creep
Fail: (7) greater_than(succ(succ(0)), 0) ? creep
Fail: (6) greater_than(succ(succ(succ(0))), succ(0)) ? creep
false. 

Why is there a redo here? How can I avoid it (without a cut, of course)?

Кстати, прежде чем спросить: нет, это не какая-то домашняя работа ...

Ответы на вопрос(2)

Ваш ответ на вопрос