Problème idiot de "redo" supplémentaire
Bonjour,
Je me remets à Prolog après une longue période d'abstinence. Je suis sur un petit exercice qui consiste à écrire un prédicat "greater_than" avec une notation d'entiers de type "successeur de" :
Code:
1 2 3 4 5 6
|
greater_than(0, 0).
greater_than(succ(A), 0) :-
greater_than(A, 0).
greater_than(succ(A), succ(B)) :-
greater_than(A, B). |
Ma question : pourquoi est-ce qu'en l'état, la requête
Code:
greater_than(succ(succ(succ(0))),succ(0))
fait faire un "Redo" à SWI-prolog sur la deuxième entrée du prédicat ? Pour l'éviter je suis obligé de rajouter une coupure, que je souhaite éviter (parce que je suis convaincu qu'elle n'est pas nécessaire).
Trace d'exécution :
Citation:
[trace] ?- greater_than(succ(succ(succ(0))),succ(0)).
Call: (7) greater_than(succ(succ(succ(0))), succ(0)) ? creep
Call: (8) greater_than(succ(succ(0)), 0) ? creep
Call: (9) greater_than(succ(0), 0) ? creep
Call: (10) greater_than(0, 0) ? creep
Exit: (10) greater_than(0, 0) ? creep
Exit: (9) greater_than(succ(0), 0) ? creep
Exit: (8) greater_than(succ(succ(0)), 0) ? creep
Exit: (7) greater_than(succ(succ(succ(0))), succ(0)) ? creep
true ;
Redo: (9) greater_than(succ(0), 0) ? creep
Fail: (9) greater_than(succ(0), 0) ? creep
Redo: (8) greater_than(succ(succ(0)), 0) ? creep
Fail: (8) greater_than(succ(succ(0)), 0) ? creep
Fail: (7) greater_than(succ(succ(succ(0))), succ(0)) ? creep
false.
Il y a sans doute quelque chose qui me crève les yeux... Merci de votre aide !