मैं हर रोज फंक्शनल प्रोग्रामिंग पर लेख पढ़ रहा हूं और यथासंभव कुछ प्रथाओं को लागू करने की कोशिश कर रहा हूं। लेकिन मुझे समझ में नहीं आ रहा है कि करी या आंशिक अनुप्रयोग में क्या अद्वितीय है।
इस ग्रूवी कोड को एक उदाहरण के रूप में लें:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
मुझे समझ नहीं आता के बीच अंतर है क्या tripler1
और tripler2
। क्या वे दोनों एक ही नहीं हैं? 'करी' का समर्थन शुद्ध या आंशिक कार्यात्मक भाषाओं जैसे ग्रूवी, स्काला, हास्केल आदि में किया जाता है, लेकिन मैं एक ही चीज़ बना सकता हूं (बाएं-करी, राइट-करी, एन-करी या आंशिक अनुप्रयोग) बस एक अन्य या अनाम बनाकर फ़ंक्शन या क्लोजर जो मूल फ़ंक्शन (जैसे tripler2
) को अधिकांश भाषाओं (यहां तक कि सी) के मापदंडों को आगे बढ़ाएगा ।
क्या मुझसे कोई चूक हो रही है? ऐसे स्थान हैं जहां मैं अपने ग्रेल्स एप्लिकेशन में करी और आंशिक अनुप्रयोग का उपयोग कर सकता हूं, लेकिन मैं ऐसा करने में संकोच कर रहा हूं क्योंकि मैं खुद से पूछ रहा हूं "यह कैसे अलग है?"
कृपया मुझे ज्ञान दो।
संपादित करें: क्या आप लोग कह रहे हैं कि आंशिक रूप से आवेदन / क्यूरिंग किसी अन्य फ़ंक्शन को बनाने / कॉल करने की तुलना में अधिक कुशल है जो मूल फ़ंक्शन के लिए डिफ़ॉल्ट पैरामीटर को अग्रेषित करता है?
f x y = x + y
इसका मतलब है कि f
एक फ़ंक्शन है जो एक इंट पैरामीटर लेता है। f x
(पर f
लागू x
) का परिणाम एक फ़ंक्शन है जो एक इंट पैरामीटर लेता है। परिणाम f x y
(या (f x) y
, यानी पर f x
लागू y
) एक अभिव्यक्ति है जो कोई इनपुट पैरामीटर नहीं लेता है और कम करके मूल्यांकन किया जाता है x + y
।