2010-10-03 11 views
8

Tengo un problema tratando de obtener algún código que devuelva respuestas únicas a mi consulta. Por ejemplo, la definición deSoluciones duplicadas

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

luego corriendo

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

da la salida:

A = a 
B = b ? ; 

A = a 
B = b ? ; 

yes. 

Como se puede ver las dos soluciones son los mismos. ¿Hay alguna manera de lograr que PROLOG devuelva las soluciones únicas, yo, e. dar la salida:

A = a 
B = b ? ; 

yes. 
+0

+1 para una pregunta prólogo. No los veo con demasiada frecuencia aquí. –

+2

Esta pregunta ya se ha discutido en http://stackoverflow.com/questions/724358/ – Kaarel

Respuesta

2

También puede utilizar

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

La única manera que sé es utilizar findall/3 para generar todos los resultados, a continuación, eliminar duplicados mismo. (A menos que la solución más obvia - evitar algoritmos que overgenerate; pero luego, en muchos casos no se puede hacer eso.)