पर विचार करें एक समारोह च (एक्स, वाई):कार्यात्मक भाषाओं का उपयोग बार-बार गणना मूल्यों के विरुद्ध मदद करता है?
f(x,0) = x*x;
f(0,y) = y*(y + 1);
f(x,y) = f(x,y-1) + f(x-1,y);
एक है कि लागू करने के लिए सी जैसे कुछ भाषा में रिकर्सिवली की कोशिश करता है ++ वह एक समस्या का सामना करेंगे।
मान लीजिए कि फ़ंक्शन को पहले x = x0
और y = y0
के साथ बुलाया जाता है। फिर किसी भी जोड़ी (x, y) के लिए जहां 0 <= x < x0
और 0 <= y < y0
इंटरमीडिएट मानों की गणना कई बार की जाएगी - रिकर्सिव कॉल एक विशाल पेड़ बन जाएगा जिसमें वास्तव में कई पत्तियों में एक ही जोड़े (x, y) होंगे। जोड़े (x, y) के लिए जहां x और y दोनों 0 मानों के करीब हैं, कई बार गणना की जाएगी।
उदाहरण के लिए, मैंने सी ++ में लागू एक समान कार्य का परीक्षण किया - x=20
और y=20
के लिए इसकी गणना में लगभग 4 घंटे लगते हैं (हाँ, चार पृथ्वी घंटे!)।
जाहिर है कि कार्यान्वयन को इस तरह से फिर से लिखा जा सकता है कि बार-बार गणना नहीं होती - या तो इसे या कैश तालिका के साथ।
सवाल यह है: क्या क्रियात्मक भाषाएं बेहतर प्रदर्शन करती हैं और उपरोक्त उपरोक्त कार्य को कार्यान्वित करते समय बार-बार गणना की जाती हैं?
यह कार्यान्वयन पर निर्भर करता है। यह ऐसा कुछ नहीं है जो कार्यात्मक भाषाओं में स्वाभाविक रूप से तेज़ है। उस ने कहा, मुझे लगता है कि एक कार्यात्मक भाषा में इस तरह के अनुकूलन को लागू करना संभव है, लेकिन मुझे विशिष्टताओं को नहीं पता है इसलिए मैं ठोस जवाब नहीं दूंगा। –