2010-10-03 4 views
8

J'ai un problème en essayant d'obtenir du code qui renvoie des réponses uniques à ma requête. Par exemple, la définitionSolutions en double

stuff(A,B,C) :- A=C ; B=C. 
morestuff([],[],[]). 
morestuff([A|AA],[B|BB],[C|CC]) :- stuff(A,B,C), morestuff(AA,BB,CC). 

puis en cours d'exécution

morestuff([A,A],[A,B],[a,b]). 

donne la sortie:

A = a 
B = b ? ; 

A = a 
B = b ? ; 

yes. 

Comme vous pouvez le voir les deux solutions sont les mêmes. Existe-t-il un moyen de faire en sorte que PROLOG renvoie les solutions uniques, par exemple. donner la sortie:

A = a 
B = b ? ; 

yes. 
+0

+1 pour une question Prolog. Je ne les vois pas trop souvent ici. –

+2

Cette question a déjà été abordée dans http://stackoverflow.com/questions/724358/ – Kaarel

Répondre

2

Vous pouvez également utiliser

| ?- setof(sol(A,B),morestuff([A,A],[A,B],[a,b]),L). 
L = [sol(a,b)] ? 
yes 
1

La seule façon que je sais est d'utiliser findall/3 pour générer tous les résultats, puis retirez-vous des doublons. (La solution la plus A moins évidente - d'éviter des algorithmes qui overgenerate, mais, dans de nombreux cas, vous ne pouvez pas le faire.)