मेरी सीमित समझ ऐसी है:
1) आंशिक समारोह आवेदन
आंशिक फ़ंक्शन अनुप्रयोग एक फ़ंक्शन को वापस करने की प्रक्रिया है जो कम संख्या में तर्क लेती है। यदि आप 3 में से 2 तर्क प्रदान करते हैं, तो यह 3-2 = 1 तर्क लेता है। यदि आप 3 तर्कों में से 1 प्रदान करते हैं, तो यह 3-1 = 2 तर्कों को लेने वाला फ़ंक्शन लौटाएगा। यदि आप चाहते हैं, तो आप आंशिक रूप से 3 में से 3 तर्कों को भी लागू कर सकते हैं और यह एक ऐसा फ़ंक्शन लौटाएगा जिसमें कोई तर्क नहीं है।
तो निम्न कार्य दिया:
f(x,y,z) = x + y + z;
जब 1 से x को बाँधना और आंशिक रूप से उपरोक्त फ़ंक्शन पर लागू करना है जो f(x,y,z)
आपको मिलेगा:
f(1,y,z) = f'(y,z);
कहाँ पे: f'(y,z) = 1 + y + z;
अब यदि आप y को 2 और z को 3 से बाँधते हैं, और आंशिक रूप से लागू होते f'(y,z)
हैं:
f'(2,3) = f''();
कहाँ f''() = 1 + 2 + 3
:;
अब किसी भी बिंदु पर, आप मूल्यांकन करना चुन सकते हैं f
, f'
या f''
। तो मैं कर सकता हूँ:
print(f''()) // and it would return 6;
या
print(f'(1,1)) // and it would return 3;
2) करी
दूसरी ओर क्यूरिंग एक फ़ंक्शन को एक तर्क फ़ंक्शन के नेस्टेड श्रृंखला में विभाजित करने की प्रक्रिया है। आप कभी भी 1 से अधिक तर्क नहीं दे सकते, यह एक या शून्य है।
तो एक ही कार्य दिया:
f(x,y,z) = x + y + z;
यदि आप इसे कर लेते हैं, तो आपको 3 कार्यों की एक श्रृंखला मिलेगी:
f'(x) -> f''(y) -> f'''(z)
कहाँ पे:
f'(x) = x + f''(y);
f''(y) = y + f'''(z);
f'''(z) = z;
अब अगर आप कॉल f'(x)
करते हैं x = 1
:
f'(1) = 1 + f''(y);
आपको एक नया फ़ंक्शन लौटाया गया है:
g(y) = 1 + f''(y);
यदि आप फोन g(y)
करते हैं y = 2
:
g(2) = 1 + 2 + f'''(z);
आपको एक नया फ़ंक्शन लौटाया गया है:
h(z) = 1 + 2 + f'''(z);
अंत में अगर आप कॉल h(z)
करते हैं z = 3
:
h(3) = 1 + 2 + 3;
आपको लौटा दिया जाता है 6
।
३) बंद होना
अंत में, क्लोजर एक इकाई के रूप में एक फ़ंक्शन और डेटा को एक साथ कैप्चर करने की प्रक्रिया है। एक फ़ंक्शन क्लोजर में 0 से अनंत संख्या में तर्क हो सकते हैं, लेकिन यह उस डेटा के बारे में भी जानता है जो इसके पास नहीं गया है।
फिर से, समान कार्य दिया गया:
f(x,y,z) = x + y + z;
आप इसके बजाय एक बंद लिख सकते हैं:
f(x) = x + f'(y, z);
कहाँ पे:
f'(y,z) = x + y + z;
f'
पर बंद है x
। मतलब कि f'
जो x के अंदर है उसका मूल्य पढ़ सकते हैं f
।
तो अगर आप के f
साथ कॉल करने के लिए गए थे x = 1
:
f(1) = 1 + f'(y, z);
आपको एक बंद मिलेगा:
closureOfF(y, z) =
var x = 1;
f'(y, z);
अब अगर आप के closureOfF
साथ बुलाया y = 2
और z = 3
:
closureOfF(2, 3) =
var x = 1;
x + 2 + 3;
जो लौटेगा 6
निष्कर्ष
करी, आंशिक अनुप्रयोग और क्लोजर सभी कुछ समान हैं कि वे एक फ़ंक्शन को अधिक भागों में विघटित करते हैं।
एकल तर्कों के नेस्टेड फ़ंक्शंस में कई तर्कों के फ़ंक्शन को करीने से विघटित करता है जो एकल तर्कों के कार्यों को वापस करते हैं। एक या कम तर्क के कार्य को पूरा करने का कोई मतलब नहीं है, क्योंकि इसका कोई मतलब नहीं है।
आंशिक आवेदन कम तर्कों के एक समारोह में कई तर्कों का एक कार्य विघटित करता है जिनकी अब लापता दलीलों को आपूर्ति मूल्य के लिए प्रतिस्थापित किया गया था।
क्लोजर एक फ़ंक्शन और एक डेटासेट में एक फ़ंक्शन को विघटित करता है जहां फ़ंक्शन के अंदर चर जो कि पारित नहीं हुए थे मूल्यांकन करने के लिए कहने के खिलाफ बाइंड करने के लिए मान खोजने के लिए डेटासेट के अंदर देख सकते हैं।
इन सभी के बारे में क्या भ्रम है कि वे दूसरों के सबसेट को लागू करने के लिए प्रत्येक का उपयोग कर सकते हैं। तो संक्षेप में, वे सभी कार्यान्वयन विवरण के एक बिट हैं। वे सभी समान मूल्य प्रदान करते हैं कि आपको सभी मूल्यों को अग्रिम रूप से इकट्ठा करने की आवश्यकता नहीं होती है और इसमें आप फ़ंक्शन का हिस्सा पुन: उपयोग कर सकते हैं, क्योंकि आपने इसे विखंडित इकाइयों में विघटित कर दिया है।
प्रकटीकरण
मैं इस विषय का विशेषज्ञ नहीं हूं, मैंने हाल ही में इनके बारे में सीखना शुरू किया है, और इसलिए मैं अपनी वर्तमान समझ प्रदान करता हूं, लेकिन इसमें गलतियां हो सकती हैं, जिन्हें मैं आपको इंगित करने के लिए आमंत्रित करता हूं, और मैं / के रूप में सही करूंगा मैं किसी को खोजता हूं।