के रूप में अपने प्रश्न का टिप्पणियां सुझाव देते हैं, आप यदि आप कर सकते हैं क्या हो रहा है की एक अच्छी समझ पाने के लिए एक डिबगर में कोड के माध्यम से चलना चाहिए पुस्तक में स्पष्टीकरण का पालन नहीं करते हैं। लेकिन मैं आपको क्या हो रहा है इसके बारे में एक संक्षिप्त अवलोकन प्रदान करूंगा:
क्या दिखाया जा रहा है 'ज्ञापन' है जो कार्यात्मक प्रोग्रामिंग में उपयोग की जाने वाली एक सामान्य अनुकूलन तकनीक है। एक समारोह शुद्ध माना जाता है यदि परिणाम केवल इसमें दिए गए तर्कों पर निर्भर करता है। इसलिए, यदि कोई फ़ंक्शन शुद्ध है तो आप तर्कों के आधार पर परिणाम कैश कर सकते हैं - इस तकनीक को ज्ञापन कहा जाता है। यदि कोई फ़ंक्शन गणना करने के लिए महंगा होता है और इसे कई बार कहा जाता है तो आप ऐसा करेंगे।
शास्त्रीय उदाहरण इसे प्रदर्शित करने के लिए उपयोग किया जाता है (यहां के रूप में) Fibonacci numbers उत्पन्न कर रहा है। मैं उन लोगों के माध्यम से नहीं जा रहा हूं कि वे कैसे काम कर रहे हैं, लेकिन मूल रूप से जब आप उच्च और उच्च संख्या में जाते हैं तो आप अपने आप को अधिक से अधिक दोहराते हैं क्योंकि प्रत्येक संख्या की गणना दो संख्याओं से पहले की जाती है। प्रत्येक इंटरमीडिएट परिणाम को याद करके आपको केवल एक बार एल्गोरिदम को तेज़ बनाने के बाद उन्हें गणना करना होगा (जितना तेज़ होगा उतना तेज़ होगा जितना आप अनुक्रम को ऊपर ले जाते हैं)।
जहां तक इस कोड का संबंध है, ज्ञापनकर्ता दो पैरामीटर लेता है - 'ज्ञापन' जो कैश है। इस मामले में यह पहले से ही '[0,1]' में भरे पहले दो मानों के साथ जा रहा है - ये पहले दो फिबोनाची संख्याएं हैं।
दूसरा पैरामीटर वह कार्य है जिस पर ज्ञापन लागू किया जाएगा। इस मामले में एक रिकर्सिव फाइबोनैकी फ़ंक्शन:
फ़ंक्शन (खोल, एन) { रिटर्न शैल (एन -1) + खोल (एन -2); }
यानी परिणाम अनुक्रम में पिछले दो संख्याओं का योग है।
जांचकर्ताओं के पहले यह जांचने के लिए कि पहले से ही कैश किए गए परिणाम हैं या नहीं। अगर ऐसा होता है तो यह तुरंत लौटता है। यदि नहीं, तो यह परिणाम की गणना करता है और इसे कैश में संग्रहीत करता है। ऐसा करने के बिना यह बार-बार दोहराएगा और अनुक्रम में उच्च संख्या तक पहुंचने के लिए तेजी से धीमा हो जाता है।
fibonacci (15)? – spender
मैं उम्मीद करता हूं कि पुस्तक कैसे काम करती है इस बारे में विस्तार से आगे बढ़ने की उम्मीद है - क्या विशेष रूप से कुछ भी आपको समझ में नहीं आता है? – Douglas
अरे, मैंने हाल ही में जावास्क्रिप्ट का उपयोग करके मूल यादों के बारे में एक छोटा वीडियो बनाया - शायद यह ज्ञापन को समझने में मदद करता है: https://www.youtube.com/watch?v=lsp82x0XdsY –