मैं एक तरह से सीमा समाधान भले ही अनंत समाधान देखते हैं मदद करने के लिए के रूप में यह लिखा। लेकिन मुझे एहसास हुआ कि पहले छोटे परिणाम प्राप्त करने के लिए नियमों को पुनर्व्यवस्थित करने का एक तरीका होगा।
क्योंकि ad --> a, ad, d.
ad --> bc.
से पहले मूल्यांकन किया जाता है यह ad --> bc.
से पहले ad --> a, ad, a.
को पूरा करने के प्रयास करता है। मैं ad --> a, ad, a.
से पहले ad --> bc.
डाल दूंगा। bc --> b, b, bc, c, c.
और bc --> [].
नियम
जैसा कि अरियन ने इंगित किया है कि टर्मिनिंग नियम पहले लागू होते हैं, यह सुनिश्चित करेगा कि छोटे समाधान पहले पाए जाते हैं।
मैं यह भी इंगित करना चाहता हूं कि []
एस और एस -> विज्ञापन -> बीसी -> [] के लिए दो समाधान हैं, मैं s --> [].
को अनावश्यक रूप से समाप्त कर दूंगा।
कुल मिलाकर मैं इस समाधान की कोशिश करेंगे:
s --> ad.
a --> [a].
b --> [b].
c --> [c].
d --> [d].
ad --> bc.
bc --> [].
ad --> a, ad, d.
bc --> b, b, bc, c, c.
मूल पोस्ट:
मैं देखने के लिए कैसे गिनती करना था (यह बाद से मैं prolog किया समय हो गया है) लेकिन देखते हैं एक अनंत संख्या और चूंकि प्रोलॉग सभी समाधानों को खोजने का प्रयास करता है, यह कभी भी दिखना बंद नहीं करता है, हालांकि मुझे यकीन है कि आप प्रवाह से पहले एक स्टैक या कुछ त्रुटि को हिट करेंगे :)।परिणामों की संख्या सीमित करने के लिए
एक तरह से समाधान
phrase(s, X), length(X, 4).
वास्तव में 4 मूल्यों के साथ सब समाधान हो जाता है, जो होगा के आकार को सीमित करने के लिए है
X = [a, a, d, d]
X = [b, b, c, c]
6 करने के लिए बढ़ रही है प्राप्त होते हैं :
X = [a, a, a, d, d, d]
X = [a, b, b, c, c, d]
या उपयोग पर्वतमाला:
phrase(s, X), length(X, Y), Y >= 4 , Y < 10, Y != 6.
मुझे लगता है, अगर मैं आपका प्रश्न समझ गया, तो ऐसा इसलिए है क्योंकि कई पेड़ बनाए जा सकते हैं, क्योंकि आपके व्याकरण – Muggen
में लूप हैं और मुझे इस समस्या को कैसे ठीक करना चाहिए? : -? – Simon