एक समारोह के बाद च कि तर्क लेता एक्स 1 , x 2 , ..., एक्स n
- अर्थात। f: X 1 × X 2 ×… × X n → Y
- currying Redefines च एक समारोह के रूप में एक भी तर्क लेने एक 1 जो अभी तक एक और कार्य करने के लिए मैप करता है। यह तकनीक आंशिक अनुप्रयोग के लिए उपयोगी है, उदाहरण के लिए एक घुमावदार pow
फ़ंक्शन के साथ हम लिख सकते हैं exp = pow(e)
।
उदाहरण
मान लिया जाये कि हम निम्न कार्य हो च तीन तर्कों लेने ( च: एक्स 1 × एक्स 2 × एक्स 3 → Y ):
def f(a,b,c):
return a + b * c
इस फ़ंक्शन को करीने से हमें f_curry: X 1 → (X 2 → (X 3 → Y)) के साथ छोड़ दिया जाता है , अगर हम अब उस फ़ंक्शन को दो बार कॉल करेंगे तो हमें f_curry(1)(2)
एक फ़ंक्शन मिलेगा ( h
) निम्न रिटर्न के बराबर होगा:
def h(c):
return 1 + 2 * c
करी फ़ंक्शन f
को इस तरह लिखा जा सकता है (पायथन 3):
def f_curry(a):
def g_curry(b):
def h(c):
return a + b * c
return h
return g_curry
चुनौती
आपकी चुनौती ऊपर बताए गए फंक्शन की करी होगी, यहाँ नियम हैं:
- इनपुट एक ब्लैकबॉक्स फ़ंक्शन होगा जो कम से कम 2 तर्क लेता है
- इनपुट फ़ंक्शन में हमेशा निश्चित संख्या में तर्क होंगे (विपरीत
printf
या समान, ध्यान दें: आपको किसी भी तर्क के साथ कार्यों का समर्थन करने की आवश्यकता है argu2) - यदि आपकी भाषा डिफ़ॉल्ट रूप से करी कार्यों का उपयोग करती है (उदाहरण के लिए। हास्केल), तो आप इनपुट फ़ंक्शन को "उच्च-क्रम फ़ंक्शन" के बजाय N -tuples पर परिभाषित करने की अपेक्षा कर सकते हैं।
- आप इनपुट के रूप में तर्कों की संख्या ले सकते हैं
- आउटपुट इनपुट का करी समकक्ष होगा *
- आप मान सकते हैं कि आउटपुट फ़ंक्शन केवल कभी होगा:
- इनपुट फ़ंक्शन को ले जाने वाले तर्कों की संख्या से कम या बराबर के साथ कहा जाता है
- सही प्रकार के तर्कों के साथ कहा जाता है
* इसका मतलब होगा तर्कों के f
साथ एक इनपुट N
और एक आउटपुट h
जो सभी मान्य तर्कों के लिए a1,…,aN
होता है f(a1,a2,…,aN) == h(a1)(a2)…(aN)
।
def f(a,b,c): return a + b * c
और आउटपुट है def f_curry(a): def g_curry(b): def h(c): return a + b * c return h return g_curry
?
f
(जो कहीं पर परिभाषित है) और आउटपुट के बराबर होना चाहिए f_curry
। या इनपुट होगा lambda a,b,c: a+b*c
और आउटपुट एक फ़ंक्शन के बराबर होगा f_curry
।