कोड पर असर करीकरण को मुद्दों के दो सेटों में विभाजित किया जा सकता है (मैं उदाहरण के लिए हास्केल का उपयोग करता हूं)। सिंटेक्टिकल, कार्यान्वयन।
सिंटेक्स अंक 1:
Currying कुछ मामलों में अधिक से अधिक कोड स्पष्टता की अनुमति देता है। स्पष्टता का क्या अर्थ है? फ़ंक्शन पढ़ना इसकी कार्यक्षमता का स्पष्ट संकेत प्रदान करता है। उदा। मानचित्र समारोह
map : (a -> b) -> ([a] -> [b])
इस तरह से पढ़ें, हम देखते हैं कि नक्शा एक उच्च आदेश समारोह एक समारोह है कि [b]
को [a]
बदल करने के लिए bs
को as
बदलने एक समारोह लिफ्टों है।
इस अंतर्ज्ञान को विशेष रूप से उपयोगी होने पर यह अंतर्ज्ञान उपयोगी होता है।
map (map (+1))
भीतरी नक्शा [a] -> [b]
ऊपर प्रकार है। बाहरी मानचित्र के प्रकार को जानने के लिए, हम उपरोक्त से हमारे अंतर्ज्ञान को पुन: लागू करते हैं। बाहरी नक्शा इस प्रकार [a] -> [b]
से [[a]] -> [[b]]
ले जाता है।
यह अंतर्ज्ञान आपको एक बहुत आगे ले जाएगा। एक बार जब हम map
को fmap
पर map
पर मनमाने ढंग से कंटेनरों पर सामान्यीकृत करते हैं, तो इस तरह के अभिव्यक्तियों को पढ़ने में वास्तव में आसान हो जाता है (नोट मैंने उदाहरण के लिए प्रत्येक fmap
के प्रकार को मोनोमोर्फिज्ड किया है)।
showInt : Int -> String
(fmap . fmap . fmap) showInt : Tree (Set [Int]) -> Tree (Set [String])
उम्मीद है कि इसके बाद के संस्करण दिखाता है कि fmap
कुछ मनमाने ढंग से कंटेनर से अधिक कार्यों में वेनिला कार्यों उठाने के इस सामान्यीकृत धारणा प्रदान करता है।
सिंटेक्स समस्या 2:
Currying भी बिंदु से मुक्त रूप में कार्य करता है व्यक्त करने के लिए अनुमति देता है।
nthSmallest : Int -> [Int] -> Maybe Int
nthSmallest n = safeHead . drop n . sort
safeHead (x:_) = Just x
safeHead _ = Nothing
उपर्युक्त आमतौर पर अच्छी शैली माना जाता है क्योंकि यह डेटा के स्पष्ट हेरफेर के बजाय कार्यों की पाइपलाइन के संदर्भ में सोच को दर्शाता है।
कार्यान्वयन:
हास्केल में, बिंदु मुक्त शैली (currying के माध्यम से) हमें कार्यों का अनुकूलन कर सकते हैं। बिंदु मुक्त रूप में एक फ़ंक्शन लिखना हमें इसे याद रखने की अनुमति देगा।
memoized_fib :: Int -> Integer
memoized_fib = (map fib [0 ..] !!)
where fib 0 = 0
fib 1 = 1
fib n = memoized_fib (n-2) + memoized_fib (n-1)
not_memoized_fib :: Int -> Integer
not_memoized_fib x = map fib [0 ..] !! x
where fib 0 = 0
fib 1 = 1
fib n = not_memoized_fib (n-2) + not_memoized_fib (n-1)
memoized संस्करण में के रूप में एक curried समारोह के रूप में यह लेखन एक इकाई के रूप curried समारोह व्यवहार करता है और इसलिए यह memoizes।
आपको क्या लगता है कि इस शब्द के अन्य उपयोग "गलत" हैं? – dfeuer