2010-07-22 7 views
3

J'ai écrit un prédicat common_participant(Person, PairEvent). qui renvoie des paires de faits à partir de ma base de connaissances. Je me demandais s'il était possible d'effectuer une liaison de variable et de collecter tous les résultats sans utiliser le point-virgule à chaque fois.Liaison de variables dans Prolog

Merci,

I.

+0

Je ne suis pas sûr de comprendre la question. Chaque fois quoi? – Gian

Répondre

1

Oui, vous pouvez utiliser findall/3. Mais selon ce que vous voulez vraiment faire, il y a souvent de meilleurs moyens. Voulez-vous sortir des choses? Ensuite, essayez ceci:

print_participants :- 
    common_participant(Person, PairEvent), 
    write(Person), write(' participates in '), write(PairEvent), write('.'), nl, 
    fail. 
print_participants :- 
    true. 

De cette façon, vous n'avez pas besoin de garder toutes les combinaisons dans une grande liste en même temps, mais seulement celui qui est nécessaire pour l'impression.

Édition: Correction du code, comme suggéré par Kaarel.

+0

Votre print_participants/0 n'imprime pas toutes les solutions sauf si vous utilisez le point-virgule (que l'OP voulait éviter), ou l'appelez comme "print_participants, fail; true". – Kaarel

+0

J'ai corrigé le code. En passant, j'ai interprété la question comme "Je ne veux pas appuyer sur la touche point-virgule tout le temps, juste pour obtenir toutes les réponses". Par conséquent, je pense qu'un point-virgule dans le code n'a pas d'importance. –

+0

Oui, c'est ce que je voulais dire Roland, merci beaucoup. Ça fonctionne bien. – paranza