Sunday, 15 January 2012

Form a single list from multiple answers in Prolog -


मैं वर्तमान में प्रोलॉग में कोड का यह टुकड़ा है

  s1 (Q, 100): - उत्पन्न (क्यू)। उत्पन्न ([एक्स, वाई, एस, पी]): - नेट (एक्स, 49), नेट (वाई, 9 8), एस एक्स + वाई, पी एक्स है * वाई, एस = & lt; 100, एक्स एंड एलटी; वाई। नेट (2, _) नेट (एक्स, एन): - N & gt; 2, एम एन -1, एनएटी (वाई, एम), एक्स Y + 1 है। यह वर्तमान में चौगुना,  एक्स, वाई, एस, पी की एक सूची तैयार करता है।  ऐसा है कि 

  • 1 & lt; एक्स एंड एलटी; 49
  • 1 & lt; वाई एंड एलटी; 98
  • 1 & lt; एक्स एंड एलटी; वाई
  • एक्स + वाई और एलटी; = 100
  • पी = एक्स * वाई
  • एस = एक्स + वाई

यह काम करता है और सभी संभव समाधान बनाता है, लेकिन कई उत्तरों के साथ (यानी, अगले परिणाम प्राप्त करने के लिए हर बार ; दबाएं।)

एक सूची सभी का गठन कैसे हो सकती है उदाहरण के लिए,

  [[2, 3, 5, 6], [2, 4, 6, 8], ...]  
< findall / 3

बिना सबसे पहले, आप X और वाई के लिए दिए गए अंतराल की सीमा दोनों एक करके बंद हैं:

  • < कोड> 1 & lt; एक्स एंड एलटी; 49 मेल नहीं खाता nat (X, 49) , 1 & lt; एक्स = & lt; 49 करता है।
  • 1 & lt; वाई एंड एलटी; 98 मेल नहीं खाता नेट (वाई, 98) , 1 & lt; वाई = & lt; 98 करता है।

चलो इसे आरंभ करें!

यदि आप सभी कोड एकत्र करना चाहते हैं बिना का उपयोग कर findall / 3 (आदि), एक तरीका दो सूचियों Xs और वाईएस के (उर्फ क्रॉस-उत्पाद) की गणना करना है।

Xs और वाईएस प्राप्त करने के लिए, हम अंतर्निहित परिभाषा का उपयोग कर सकते हैं:

 ? - numlist (2,49, Xs)। Xs = [2,3,4, / * लगातार पूर्णांक 5 से 47 छोड़े गए * /, 48,49] ? - संख्या सूची (2,98, वाईएस) वाईएस = [2,3,4, / * लगातार पूर्णांक 5 से 96 छोड़े गए * /, 97,98]  वाई  में प्रत्येक  वाई  में  X  में  Xs  को गठबंधन करने के लिए  

हम उपयोग करते हैं।

जो चौगुना एकत्र करने के लिए चुनते हैं, व्याकरण नियम x_y_maybe_quadruple // 2 :

  x_y_maybe_quadruple (एक्स, वाई) का उपयोग करें - - & gt; यदि इन सभी स्थितियों से मुलाकात की जाती है - (पी  

चलो इसे एक साथ रख दो!

 ? - संख्या सूची (2,49, एक्स), संख्या सूची (2,98, वाईएस), वाक्यांश (xproduct) (x_y_maybe_quadruple, Xs, Y), QSS)। क्यूएसएस = [[2,3,5,6], [2,4,6,8], / * बहुत सारे क्वाड्रुपले छोड़े गए * /, [48,51,99,2448], [48,52,100,24 9] ]।  

तो ... क्या हम वास्तव में सभी चतुर्भुज प्राप्त करते हैं यदि हम findall / 3 ?

 ? - findall (क्यू, उत्पन्न (क्यू), Qss1), संख्या सूची (2,49, Xs), संख्या सूची (2,98, वाईएस), वाक्यांश (एक्सप्रोडक्ट (x_y_maybe_quadruple, Xs, Ys) Qss2), Qss1 = Qss2 Qss1 = Qss2, Qss2 = [[2, 3, 5, 6], [2, 4, 6, 8], [2 | ...], [... | ...] | ...], एक्स = [2, 3, 4, 5, 6, 7, 8, 9, 10 | ...], वाईएस = [2, 3, 4, 5, 6, 7, 8, 9, 10 | ... ]।  

यह काम करता है! और ऐसा न कि: हम ठीक उसी चौगुनी सटीक उसी क्रम !


No comments:

Post a Comment