आंशिक समारोह आवेदन की तरह
sum = lambda x, y: x + y
inc = lambda x: sum(x, 1)
सूचना है कि 'इंक' 'योग' आंशिक रूप से लागू किया है, से कुछ भी कब्जा करने के बिना, कम तर्क के साथ एक और समारोह उपज के लिए किसी दिए गए समारोह के कुछ तर्क फिक्सिंग के बारे में है संदर्भ (जैसा कि आपने बंद करने का उल्लेख किया है)।
लेकिन, ऐसे हाथ से लिखे गए (आमतौर पर अज्ञात) फ़ंक्शन बहुत ही कठिन हैं। कोई फ़ंक्शन फ़ैक्टरी का उपयोग कर सकता है, जो एक आंतरिक फ़ंक्शन देता है। भीतरी समारोह की तरह
# sum = lambda x, y: x + y
def makePartialSumF(n):
def partialSumF(x):
return sum(x, n)
return partialSumF
inc = makePartialSumF(1)
plusTwo = makePartialSumF(2)
यहाँ, उसके संदर्भ से कुछ चर पर कब्जा कर parameterized जा सकती है, कारखाने makePartialSumF दो बार शुरू हो जाती है। आंशिक SumF फ़ंक्शन में प्रत्येक कॉल परिणाम (विभिन्न मानों को n के रूप में कैप्चर करना)। बंद करने का उपयोग आंशिक अनुप्रयोग के कार्यान्वयन को सुविधाजनक बनाता है। तो आप कह सकते हैं आंशिक आवेदन बंद करने के माध्यम से लागू किया जा सकता है। बेशक, बंद कई अन्य चीजें कर सकते हैं! (एक तरफ नोड के रूप में, अजगर उचित बंद नहीं है।)
Currying एक एकल समारोह जो उदाहरण के लिए एक एकल समारोह ... रिटर्न में एन तर्क के एक समारोह मोड़ के बारे में है कि हम एक समारोह है जो तीन तर्क लेता है और एक मान देता है:
sum = lambda x, y, z: x + y + z
curried संस्करण
curriedSum = lambda x: lambda y: lambda z: x + y + z
मुझे यकीन है कि आप की तरह अजगर कोड नहीं लिख होता है। आईएमओ की प्रेरणा करीबी सैद्धांतिक हित में है। (केवल यूनरी फ़ंक्शंस का उपयोग करके गणनाओं को व्यक्त करने का एक ढांचा: प्रत्येक फ़ंक्शन एकजुट है!) व्यावहारिक उपज यह है कि, उन भाषाओं में जहां फ़ंक्शंस का पीछा किया जाता है, कुछ आंशिक अनुप्रयोग (जब आप बाईं ओर से तर्कों को ठीक करते हैं) उतना ही छोटा होता है करीबी समारोह के लिए तर्क की आपूर्ति। (लेकिन सभी आंशिक अनुप्रयोग इस तरह के नहीं हैं। उदाहरण: दिया गया एफ (एक्स, वाई, जेड) = एक्स + 2 * वाई + 3 * जेड, जब आप वाई चर को दो चर के एक समारोह को उत्पन्न करने के लिए बाध्य करते हैं।) तो आप कह सकते हैं, करी एक ऐसी तकनीक है जो अभ्यास में और उपज के रूप में, कई उपयोगी आंशिक कार्यात्मक अनुप्रयोगों को तुच्छ बना सकती है, लेकिन यह करी की बात नहीं है।
मैंने इस मामले पर बहुत सी चीजें पढ़कर चीजों को स्पष्ट करने की कोशिश की है: करी और आंशिक अनुप्रयोगों के बीच बहुत भ्रम है, जो आम तौर पर इंटरचेंज किए जाते हैं लेकिन अलग-अलग चीजें हैं। विकिपीडिया कहता है: "आंशिक अनुप्रयोग (या आंशिक फ़ंक्शन एप्लिकेशन) एक क्रिया में कई तर्कों को ठीक करने की प्रक्रिया को संदर्भित करता है, जो छोटे धर्मार्थता के दूसरे कार्य को उत्पन्न करता है" – Cancer
जो ठीक ऊपर हो रहा है। जहां तक मैं कह सकता हूं, करीना सिर्फ फॉर्म की एक विशेष अभिव्यक्ति है। – Hamish
हां, मैं देखता हूं, आपका कोड ऐसा करता है, और यह बहुत स्पष्ट है। लेकिन ... क्या मैं भी ऐसा नहीं करता? अलग-अलग, यह स्पष्ट है कि मैं पैरामीटर के रूप में कार्य नहीं कर रहा हूं, लेकिन मैं भी एक तर्क को ठीक कर रहा हूं और छोटी धैर्य के साथ एक फ़ंक्शन बना रहा हूं जो वही काम करता है और उसी मान को देता है जैसे कि मैंने सभी पैरामीटर के साथ मूल फ़ंक्शन को बुलाया । क्षमा करें, मुझे बहुत मूर्ख लगता है, मैं परेशान हूं ... – Cancer