मैं प्रोलॉग सीख रहा हूं, और एक अभ्यास के रूप में, मैं एक साधारण डेटाबेस के साथ प्रयोग कर रहा हूं जो दिए गए नंबर तक सभी संख्याओं की गणना करता है (यानी 0 = 0, 1 = 1, 2 = 3, 3 = 6 , 4 = 10, ...)। काफी आसान:क्या इसे प्रोलॉग में पूंछ-रिकर्सिव बनाया जा सकता है?
counting_sum(0, 0).
counting_sum(Num, Sum) :- Num > 0, PrevNum is Num - 1,
counting_sum(PrevNum, PrevSum), Sum is Num + PrevSum.
कि एक ढेर अतिप्रवाह साथ counting_sum(150000, X).
के आसपास कहीं ऊपर चल रही है। मैं समझता हूँ कि Prolog पूंछ प्रत्यावर्तन कर सकते हैं, लेकिन अगर मैं शासन के अंत के लिए पुनरावर्ती कॉल ले जाते हैं, मैं
error(instantiation_error,(is)/2)
जो मुझे लगता है मैं PrevSum
उपयोग नहीं कर सकते से पहले यह counting_sum(PrevNum, PrevSum)
के साथ एकीकृत किया गया है कह रहा है कि मिल । क्या यह सही है, और क्या यह पूंछ-पुनरावर्ती बनाने का कोई तरीका है? मैं जीएनयू प्रोलॉग 1.3.1 का उपयोग कर रहा हूं अगर इससे कोई फर्क पड़ता है।
पीएस मैं अभी भी शब्दावली पर अशक्त हूँ। अगर मैं गलत तरीके से शब्दों का इस्तेमाल करता हूं तो मुझे बताएं। इस तरह
आप इन्स्टेन्शियशन त्रुटि के कारण के बारे में सही कर रहे हैं। –