2012-04-14 1 views
0

J'essaie d'imprimer tous les faits utilisés pour obtenir une solution de requête, et j'espère ne rien imprimer si l'unification échoue. Alors j'écris ceci:Comment obtenir tous les faits utilisés pour obtenir une solution de requête dans Prolog?

a:- 
    b,c,writeln(b^c->a). 
b:- 
    d,writeln(d->b). 
c:- 
    fail,writeln(e->c). 
d:- 
    writeln(d). 
a:- 
    b,d,writeln(b^d->a). 

Cependant, quand je fais une recherche a., je suis la sortie suivante tristement:

d 
d->b 
d 
d->b 
d 
b^d->a 
true. 

Quelqu'un semble me dire que Prolog a intégré machanism pour afficher tous les faits utilisés pour faire une requête. Est-il vrai? Comment puis-je obtenir la bonne sortie?

Répondre

1

Votre programme n'a pas de variables, et donc pas d'unification.

modifier: Ou mieux, dans abstrait sens, Prolog sélectionner entre une liste de clauses de Horn unifiant l'objectif actuel avec chaque tête de règle. Mais les Prologs actuels remplacent la phase de sélection par l'indexation, par les performances, et tentent d'unifier les arguments.

Lorsque vous appelez a, qui appelle betc, etimpression une expression.

Le mécanisme intégré permettant d'afficher toutes les règles utilisées dans une requête est probablement trace. Consultez votre manuel Prolog pour plus de détails, c'est un argument assez complexe, impliquant les rouages ​​internes du système, et l '«architecture» du langage que vous ciblez.

Il n'y a bien sûr aucune sortie droite, à part ce que vous pouvez voir. C'est la sémantique que tu as écrite.

Questions connexes