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" :
Ma question : pourquoi est-ce qu'en l'état, la requête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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).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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part greater_than(succ(succ(succ(0))),succ(0))
Trace d'exécution :
Il y a sans doute quelque chose qui me crève les yeux... Merci de votre aide ![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.
Partager