टीएल; डीआर जैसा कि अन्य लोगों ने बताया: लंबोदर नोटेशन केवल उन लोगों को नाम देने के लिए मजबूर किए बिना कार्यों को परिभाषित करने का एक तरीका है।
दीर्घ संस्करण
मैं इस विषय पर थोड़ा विस्तार करना चाहूंगा क्योंकि मुझे यह बहुत दिलचस्प लगता है। डिस्क्लेमर: मैंने लम्बे समय पहले लैम्ब्डा कैलकुलस पर अपना कोर्स लिया है। यदि बेहतर ज्ञान वाला कोई व्यक्ति मेरे उत्तर में कोई भी अशुद्धि पाता है, तो बेहिचक उसे सुधारने में मेरी मदद करें।
आइए अभिव्यक्ति के साथ शुरू करें, जैसे 1 + 2
और x + 2
। जैसे साहित्य 1
और 2
उन्हें स्थिरांक कहा जाता है क्योंकि वे विशिष्ट निश्चित मूल्यों से बंधे होते हैं।
एक पहचानकर्ता जैसे चरx
कहा जाता है और इसका मूल्यांकन करने के लिए आपको इसे पहले कुछ मूल्य पर बांधने की आवश्यकता होती है। इसलिए, मूल रूप से आप तब x + 1
तक मूल्यांकन नहीं कर सकते जब तक आप यह नहीं जानते कि क्या x
है।
लैम्ब्डा संकेतन विशिष्ट इनपुट मानों को चर में बाँधने के लिए एक स्कीमा प्रदान करता है। एक लैंबडा अभिव्यक्ति को λx .
मौजूदा अभिव्यक्ति के सामने जोड़कर बनाया जा सकता है , जैसे λx . x + 1
। चर x
होना कहा जाता है मुक्त में x + 1
और बाध्य मेंλx . x + 1
यह अभिव्यक्ति का मूल्यांकन करने में कैसे मदद करता है? यदि आप लैम्ब्डा अभिव्यक्ति के लिए एक मूल्य फ़ीड, जैसे
(λx . x + 1) 2
तब आप x
मान 2 के साथ चर की सभी घटनाओं को बदलकर (बाध्यकारी) करके पूरी अभिव्यक्ति का मूल्यांकन कर सकते हैं :
(λx . x + 1) 2
2 + 1
3
तो, लैम्ब्डा संकेतन चीजों को एक अभिव्यक्ति / प्रोग्राम ब्लॉक में आने वाले चर के लिए बाध्यकारी करने के लिए एक सामान्य तंत्र प्रदान करता है। संदर्भ के आधार पर, यह प्रोग्रामिंग भाषाओं में अलग-अलग अवधारणाएं बनाता है:
- हास्केल जैसी विशुद्ध रूप से कार्यात्मक भाषा में, लैम्ब्डा अभिव्यक्तियाँ गणितीय अर्थों में कार्यों का प्रतिनिधित्व करती हैं: एक इनपुट मूल्य को लैम्बडा के शरीर में इंजेक्ट किया जाता है और एक आउटपुट मूल्य का उत्पादन किया जाता है।
- कई भाषाओं में (जैसे जावास्क्रिप्ट, पायथन, स्कीम) एक लैम्ब्डा अभिव्यक्ति के शरीर का मूल्यांकन करने के दुष्प्रभाव हो सकते हैं। इस मामले में एक शब्द का उपयोग कर सकते प्रक्रिया अंतर wrt शुद्ध कार्यों को चिह्नित करने के।
मतभेदों के अलावा, लैम्ब्डा संकेतन औपचारिक मापदंडों को परिभाषित करने और उन्हें वास्तविक मापदंडों से बांधने के बारे में है।
अगला कदम, फ़ंक्शन / प्रक्रिया को एक नाम देना है। कई भाषाओं में, फ़ंक्शन किसी भी अन्य की तरह मान हैं, इसलिए आप किसी फ़ंक्शन को निम्नानुसार नाम दे सकते हैं:
(define f (lambda (x) (+ x 1))) ;; Scheme
f = \x -> x + 1 -- Haskell
val f: (Int => Int) = x => x + 1 // Scala
var f = function(x) { return x + 1 } // JavaScript
f = lambda x: x + 1 # Python
जैसा कि एली बरज़िले ने बताया, ये परिभाषा केवल f
एक मूल्य के लिए नाम को बांधती है , जो एक फ़ंक्शन होता है। इसलिए इस संबंध में, फ़ंक्शन, संख्या, तार, वर्ण सभी मान हैं जो एक ही तरह से नामों से बंधे हो सकते हैं:
(define n 42) ;; Scheme
n = 42 -- Haskell
val n: Int = 42 // Scala
var n = 42 // JavaScript
n = 42 # Python
इन भाषाओं में आप अधिक परिचित (लेकिन समतुल्य) संकेतन का उपयोग करके किसी फ़ंक्शन को किसी नाम से बाँध सकते हैं:
(define (f x) (+ x 1)) ;; Scheme
f x = x + 1 -- Haskell
def f(x: Int): Int = x + 1 // Scala
function f(x) { return x + 1 } // JavaScript
def f(x): return x + 1 # Python
कुछ भाषाएँ, जैसे C, केवल परिभाषित (नामित) कार्यों के लिए उत्तरार्द्ध अंकन का समर्थन करती हैं।
बंद
क्लोजर के संबंध में कुछ अंतिम टिप्पणियां । अभिव्यक्ति पर विचार करें x + y
। इसमें दो मुक्त चर शामिल हैं। यदि आप x
लैम्बडा नोटेशन का उपयोग करते हुए बांधते हैं, तो आपको :
\x -> x + y
यह एक फ़ंक्शन नहीं है (अभी तक) क्योंकि इसमें अभी भी एक मुफ्त चर शामिल है y
। आप इसे बाइंड करके एक फंक्शन बना सकते हैं y
:
\x -> \y -> x + y
या
\x y -> x + y
जो कि +
फंक्शन की तरह ही है ।
लेकिन आप इसे y
दूसरे तरीके से (*) बाँध सकते हैं :
incrementBy y = \x -> x + y
फ़ंक्शन incrementBy को एक नंबर पर लागू करने का परिणाम एक क्लोजर है, अर्थात एक फ़ंक्शन / प्रक्रिया जिसके शरीर में एक निशुल्क चर (जैसे y
) होता है जो उस वातावरण से एक मूल्य के लिए बाध्य किया गया है जिसमें क्लोजर को परिभाषित किया गया था।
तो incrementBy 5
फ़ंक्शन (बंद) है जो 5 से संख्या बढ़ाता है।
ध्यान दें (*)
मैं यहाँ थोड़ा धोखा दे रहा हूँ:
incrementBy y = \x -> x + y
के बराबर है
incrementBy = \y -> \x -> x + y
इसलिए बाध्यकारी तंत्र समान है। सहज रूप से, मैं एक क्लोजर के बारे में सोचता हूं जो एक अधिक जटिल लैम्ब्डा अभिव्यक्ति का हिस्सा है। जब यह प्रतिनिधित्व बनाया जाता है, तो माँ की अभिव्यक्ति के कुछ बाइंडिंग पहले ही सेट हो चुके होते हैं और जब उनका मूल्यांकन / चालान हो जाता है, तो क्लोजर बाद में उनका उपयोग करता है।