7 votes

Couper et échouer en Prologue

Considérons le code suivant :

a(X) :- b(X),!,c(X),fail.
a(X) :- d(X).

b(1).
b(4).
c(1).
c(3).

d(4).

La requête a(X). produit

1 ?- a(X).
false.

2 ?-

mais avec ce code

a(X) :- b(X),!,c(X).
a(X) :- d(X).

b(1).
b(4).
c(1).
c(3).

d(4).

La requête a(X). résulte en :

1 ?- a(X).
X = 1.

Donc ma question est, pourquoi le fail/1 produit un faux ? il est censé forcer le retour en arrière, non ? alors b(1) y c(1). serait vérifié, je pense, alors pourquoi échouer ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X