2010-10-03 15 views
8

मुझे कुछ कोड प्राप्त करने का प्रयास करने में समस्या है जो मेरी क्वेरी के अद्वितीय उत्तर देता है।डुप्लिकेट समाधान

A = a 
B = b ? ; 

A = a 
B = b ? ; 

yes. 

आप देख सकते हैं दो समाधान एक ही कर रहे हैं: उदाहरण के लिए, को परिभाषित करने

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

तो

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

चल उत्पादन देता है। अनूठे समाधानों को वापस करने के लिए सिर्फ पोलॉग प्राप्त करने का कोई तरीका है, i, ई।

A = a 
B = b ? ; 

yes. 
+0

+1 उपयोग कर सकते हैं। मैं उन्हें अक्सर यहां नहीं देखता हूं। –

+2

http://stackoverflow.com/questions/724358/ में इस प्रश्न पर पहले से ही चर्चा की गई है – Kaarel

उत्तर

2

तुम भी एक prolog प्रश्न के लिए

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

एक ही तरीका है मुझे पता है कि findall/3 उपयोग करने के लिए सभी परिणाम उत्पन्न करने के लिए है, तो डुप्लिकेट अपने आप को दूर है: उत्पादन दे। (वर्जित सबसे स्पष्ट समाधान - एल्गोरिदम कि overgenerate से बचने, लेकिन फिर, कई मामलों में आप ऐसा नहीं कर सकते।)

संबंधित मुद्दे