This prolog query should return true instead it returns a list -


मैं follwing prolog कार्यक्रम लिख रहा हूँ

  जोड़ी ([], एक्स, [] )। जोड़ी ([एल 1], एक्स, [एल 2]): - एल 2 = (एल 1, एक्स)। जोड़ी ([एच 1 | एल 1], एक्स, [एच 2 | एल 2]): - जोड़ी (एल 1, एक्स, एल 2), एच 2 = (एच 1, एक्स)।  

यह इसके लिए सही देता है:

  जोड़ी ([1,2,3], ए, [(1, ए), (2, ए ), (3, एक)])।  

और निम्नलिखित:

  listOfPairs ([]): - [] ListOfPairs ([(एक्स, वाई) | एल]): - एच = (एक्स, वाई), सूचीओफ़पैरस (एल)।  

जो सूची में मौजूद तत्व जोड़ते हैं, तो वह सही हो जाता है।

अब मेरे पास है:

  जोड़ी ([a, 1 , डी], 2, एल), सूचीओफ़पैरस (एल)।  

जो कि L = [(a, 2), (1, 2), (d, 2)] और सूची जोड़े की रिटर्न सही होती है, हालांकि यह एक केवल एल लौटाता है। मैंने यह देखने के लिए ट्रेस का इस्तेमाल किया है कि क्यों काम नहीं करता, लेकिन यह वास्तव में मेरी मदद नहीं करता।

सबसे पहले, निम्नलिखित खंड को तय किया जाना चाहिए:

  listOfPairs ([]): - []  

यह GNU Prolog में विफल हो जाएगा क्योंकि [] / 0 मौजूदा मौजूदा नहीं है आप इसे इसे बदल सकते हैं:

  listOfPairs ([])।  

अगला, यदि आप कॉल करते हैं:

  जोड़ी ([a, 1, d], 2, एल), सूचीओफ़पैरर्स (एल)  

आपको (जीएनयू प्रोल में) मिलेगा:

  एल = [(ए, 2), (1,2), (डी 2) ]? एक एल = [(ए, 2), (1,2), (डी, 2)] (1 एमएस) हाँ  

इसका अर्थ है कि जोड़ी सफल हुआ एल के दिखाए गए मूल्य के साथ listOfPairs के रूप में अच्छी तरह से सफल हुआ और पूरे खंड सफल हुआ (इस प्रकार yes )।

यदि आप एल , आपको एक अन्य निजता की आवश्यकता है:

  myCheck (एक्स, वाई): - जोड़ी (एक्स, वाई, एल), सूचीओफ़पैरस (एल)।  

तब आप प्राप्त करते हैं:

  | ? - माईचेक ([ए, 1, डी], 2)। सच ? एक हाँ  

आपको SWI Prolog में कुछ समान दिखना चाहिए (आप इसका इस्तेमाल नहीं कर रहे हैं जिसका आप का उपयोग कर रहे हैं)।


Comments