2017-10-02 1 views
0
edge(a,b). 
edge(a,c). 
edge(b,c). 
edge(c,e). 
edge(c,d). 
edge(d,e). 
edge(f,g). 
edge(g,h). 

allways(X,Y) :- edge(X,Z), allways(Z,Y), write(Z). 
allways(X,Y) :- edge(X,Y), write(Y). 

moyens (a, e) est censé imprimer toutes les manières d'un à e, ce code permet de résoudre le problème, mais l'imprimer en arrière .. des conseils sur la façon de rendre le programme imprimer les solutions dans l'ordre correct?Prolog - programme résoudre la question mais à l'envers

sortie est en ce moment:

ways(a,e). 
edcb 
true ; 
ecb 
true ; 
edc 
true ; 
ec 
true ; 
false. 

EDIT: Ive a essayé

allways(X,Y) :- edge(X,Z), write(Z), allways(Z,Y). 
allways(X,Y) :- edge(X,Y), write(Y). 

et la sortie a très bizarre, et je ne comprends pas pourquoi.

?- allways(a,e). 
bcedee 
true ; 
e 
true ; 
cedee 
true ; 
e 
true ; 
false. 

Répondre

1

changement « écriture » prédicat avant AllWays(), chaque fois que vous attendez avec écriture à la fin de votre fonction récursive, de sorte que vous imprimez de la fin au début.

+0

Il a corrigé le problème de sortie en arrière mais à la place la sortie devient vraiment bizarre, haha ​​.. – Frans

+0

@Frans, combien bizarre? – Armatorix

+0

Probablement besoin de changer l'ordre des fonctions 'allways', va vérifier plus tard. – Armatorix