लैम्बडा भाषा क्या है?


90

मैं "जावास्क्रिप्ट: द गुड पार्ट्स" पढ़ रहा था और लेखक का उल्लेख है कि जावास्क्रिप्ट लॉन्च होने वाली लैम्ब्डा भाषाओं में से पहली है।

जावास्क्रिप्ट के कार्य प्रथम श्रेणी की वस्तुएं हैं (अधिकतर) लेक्सिकल स्कूपिंग। जावास्क्रिप्ट मुख्यधारा में जाने वाली पहली लैम्ब्डा भाषा है। नीचे दीप, जावा के साथ जावास्क्रिप्ट में लिस्प और स्कीम के साथ आम है। यह C के कपड़ों में लिस्प है। यह जावास्क्रिप्ट उल्लेखनीय शक्तिशाली भाषा है।

मुझे एक लैम्ब्डा भाषा नहीं मिली। ऐसी भाषा के गुण क्या हैं और यह जावा, सी, सी ++ और पीएचपी जैसी भाषाओं से कैसे भिन्न है?


6
लैंबडा का अर्थ है अनाम अभिव्यक्ति। अतः
लंबोदर

Google पुस्तकें लिंक, FYI करें: books.google.co.uk/…
लुकास जोन्स

3
विकिपीडिया पर लैम्ब्डा कैलकुलस देखें ।
Oded

बहुत से अच्छे जवाब। मैं अब तक जो समझ रहा हूं वह यह है कि यदि आप अनाम फ़ंक्शन का उपयोग कर रहे हैं तो यू लैम्ब्डा भाषा पर काम कर रहे हैं। क्या यह सही समझ है कि जावा जैसी भाषा से लैम्डा भाषाएं कितनी भिन्न हैं।
सुशील भरवानी

4
"मैं 'जावास्क्रिप्ट: द गुड पार्ट्स' पढ़ रहा था और लेखक का उल्लेख है कि जावास्क्रिप्ट लॉन्च होने वाली लैम्ब्डा भाषाओं में से पहली है।" इसलिए मैंने लैम्बडा भाषा को देखा और एसओ पर यह सवाल पाया :)
बग्स बनी

जवाबों:


38

मैंने कभी नहीं सुना है कि कोई भी व्यक्ति "लैम्ब्डा भाषा" शब्द का उपयोग करता है, और एकमात्र प्रशंसनीय परिभाषा जो मैं सोच सकता हूं कि जावास्क्रिप्ट को "पहले" के रूप में बाहर रखा जाएगा।

उसने कहा, मुझे संदेह है कि वह या तो इसका मतलब हो सकता है:

  • कार्यात्मक भाषाएं: भाषाओं का एक वर्ग जिसमें संगणना (या हो सकती है) को (संभवतः उच्च-क्रम) कार्यों की एक सांख्यिक रचना के रूप में प्रस्तुत किया जाता है। LISP, स्कीम, ML, Haskell, इत्यादि को अक्सर इस वर्ग में लिया जाता है, हालाँकि इनमें से कई अधिक अच्छी तरह से मिश्रित प्रतिमान या "कार्यात्मक वैकल्पिक" भाषाएं हैं। जावास्क्रिप्ट में यकीनन प्रोग्रामिंग की "कार्यात्मक शैली" बनाने के लिए आवश्यक विशेषताएं हैं।
  • वे भाषाएँ जो अनाम फ़ंक्शंस के निर्माण की अनुमति देती हैं ( functionजावास्क्रिप्ट में सिंटैक्स का उपयोग करना; यह lambdaकई भाषाओं में लिखा गया है, इसलिए संभवतः "लैम्ब्डा भाषाएँ" हैं।

दोनों usages को पत्र पत्र लैंबडा के उपयोग से प्राप्त किया जाता है, लैंबडा कैलकुलस में फंक्शन एब्स्ट्रक्शन को दर्शाने के लिए, अलोंजो चर्च द्वारा तैयार की गई गणना का मॉडल और जिस पर कार्यात्मक प्रोग्रामिंग आधारित है।

संपादित करें: Google पुस्तकें परिणाम पर ध्यान दिया गया --- "मुख्यधारा में जाने के लिए सबसे पहले"; ठीक है, यह यकीनन है। मैं आगे रखूंगा कि LISP कम से कम यथोचित मुख्यधारा में एक बिंदु पर था। यह एक उचित बिंदु है, हालांकि, जावास्क्रिप्ट का शब्दार्थ सीधे योजना से प्रेरित है और यह निश्चित रूप से किसी भी अन्य भाषा की तुलना में बड़े दर्शकों तक पहुंच गया है जो समान दावे कर सकते हैं।


कृपया लुकास जोन्स Google पुस्तक लिंक द्वारा पोस्ट किए गए लिंक को देखें जहां वह सटीक पृष्ठ पर ले जाता है जिसके बारे में मैं बात कर रहा हूं। उर उत्तर के लिए धन्यवाद।
सुशील भवानी

5
जावास्क्रिप्ट को 'पहला' होने के रूप में वर्णित किया गया है क्योंकि यह कथन 'मुख्यधारा में जाने' के लिए योग्य है। मुझे लगता है कि यह बहुत स्पष्ट है कि जावास्क्रिप्ट वास्तव में पहली कार्यात्मक शैली की भाषा है जिसका उपयोग हर दिन के प्रोग्रामर हर दिन की नौकरियों में करते हैं।
rfunduk

1
जब आप प्रोग्रामिंग भाषा के "कार्यात्मक शैली" कहते हैं, तो आपका क्या मतलब है मैं एक जावा बैकग्राउंड से हूं और जावास्क्रिप्ट सीखने की कोशिश कर रहा हूं कि यह कैसे अलग है।
सुशील भरवानी

9
यह एक बड़ा विषय है। पिछले साल मैं तुम कहाँ थे: मैं क्रॉकफोर्ड के निबंध और व्याख्यान पा चुका था और बंद को समझना चाहता था। मैं तुम्हें विकिपीडिया के साथ शुरू की सिफारिश करेंगे, फिर कुछ निबंध पर चलते: जॉन ह्यूजेस "क्यों कार्यात्मक प्रोग्रामिंग मैटर्स" scribd.com/doc/26902/whyfp , Slava Akhmechet "कार्यात्मक हम में से बाकी के लिए प्रोग्रामिंग" defmacro.org/ramblings /fp.html आपके दिमाग का विस्तार करने के लिए पुस्तकों का खजाना है: स्कीम के बारे में जानने के लिए लिटिल स्कीमर की जाँच करें और फिर कंप्यूटर प्रोग्राम्स की संरचना और व्याख्या की ओर बढ़ें।
मचिआकिग

5
@ सुशील: विषय पर परिचयात्मक साहित्य बहुत है। हालांकि, सामान्य शब्दों में, यह प्रोग्रामिंग की एक शैली है जो अमूर्त वस्तुओं के बीच अनुक्रमिक निर्देशों या इंटरैक्शन के बजाय गणितीय वस्तुओं के रूप में कार्यक्रमों को व्यवहार करने पर जोर देती है। उदाहरण के लिए, कार्यात्मक भाषाएं पुनरावृत्ति को प्राथमिकता देंगी, अपरिवर्तनीय डेटा संरचनाओं का उपयोग करें, और "फ़ंक्शन ऑब्जेक्ट" या "रणनीति पैटर्न" के लिए उच्च-क्रम के कार्यों का उपयोग करें। उच्च-क्रम फ़ंक्शंस का अर्थ है फ़ंक्शंस जो (तर्कों के रूप में) या उपज (रिटर्न मान के रूप में) अन्य फ़ंक्शंस पर काम कर सकते हैं।
डेरिक तुर्क

48

एक लंबो भाषा, सरल शब्दों में, एक ऐसी भाषा है जो किसी फ़ंक्शन को किसी अन्य फ़ंक्शन को पास करने की अनुमति देती है, जहां फ़ंक्शन को किसी अन्य चर के रूप में माना जाता है। साथ ही, आपको इस फ़ंक्शन को गुमनाम रूप से (या इनलाइन) पारित करने में सक्षम होना चाहिए। PHP 5.3 ने लैम्बडा फ़ंक्शन के लिए समर्थन जोड़ा। क्या जावास्क्रिप्ट पहली मुख्यधारा की भाषा थी? लिस्प को जावास्क्रिप्ट से पहले शैक्षिक सेटिंग्स में व्यापक रूप से इस्तेमाल किया गया है और हमारे प्यारे Emacs को अनुकूलित करने में भी http://www.gnu.org/software/emacs/manual/html_node/eintr/

यहाँ एक उदाहरण है

function applyOperation(a, b, operation) {
  return operation(a,b);
}

function add(a,b) { return a+ b; }
function subtract(a,b) {return a - b;}

// Can be called like
applyOperation(1,2, add);
applyOperation(4,5, subtract);
// Anonymous inline function
applyOperation(4,7, function(a,b) {return a * b})

यह C से कैसे भिन्न है? C में, आप पॉइंटर को फ़ंक्शंस में पास कर सकते हैं, लेकिन आप इसे इनलाइन को गुमनाम रूप से परिभाषित नहीं कर सकते।

जावा (संस्करण 8 से पहले), उसी प्रभाव को प्राप्त करने के लिए, आपको एक ऑब्जेक्ट पास करना होगा जो एक इंटरफ़ेस को लागू करता है, जिसे वास्तव में गुमनाम रूप से परिभाषित किया जा सकता है।


1
"लिस्प का व्यापक रूप से उपयोग किया गया है" किसके द्वारा? मैंने हमेशा इसके बारे में जाना है, क्योंकि प्रोफेसर हमेशा इस पर चर्चा करेंगे, लेकिन व्यवहार में, मैं कभी भी किसी से नहीं मिला, जिसने लिस्प का इस्तेमाल किया हो। मैं कहूंगा कि कोई भी व्यक्ति किसी ऐसे व्यक्ति को खोज सकता है, जिसने जावास्क्रिप्ट का उपयोग किया है, जो जावास्क्रिप्ट को "अधिक मुख्यधारा" बनाता है।
पाल्सीम

"PHP 5 ने लैम्ब्डा फ़ंक्शन के लिए समर्थन जोड़ा"। वास्तव में iy PHP 5.3 था जिसने लैम्बडा फ़ंक्शंस की शुरुआत की।
क्रोज़िन

मैंने कुछ लोगों से मुलाकात की है जो इसे व्यावसायिक संदर्भ में इस्तेमाल करते हैं, लेकिन पास्कल की तरह एक बार इसका उपयोग शैक्षणिक सेटिंग्स में व्यापक रूप से किया गया था।
जुआन मेंडेस

4

वह लैंबडा कैलकुलस को संदर्भित करता है

लैंबडा कैलकुलस, जिसे λ-पथरी के रूप में भी लिखा जाता है, फ़ंक्शन परिभाषा, फ़ंक्शन एप्लिकेशन और पुनरावृत्ति के लिए एक औपचारिक प्रणाली है। [...]

[...] बिना लैंबडा कैलकुलस कार्यात्मक प्रोग्रामिंग के लिए मूल प्रेरणा होने के साथ, विशेष रूप से लिस्प में, और टाइप किए गए लैंबडा कैल्की आधुनिक प्रकार के सिस्टम के लिए नींव के रूप में सेवारत हैं।


4

मैंने एक लैंबडा को एक अनाम फ़ंक्शन के रूप में और एक फ़ंक्शन के संदर्भ के रूप में परिभाषित देखा है। जावास्क्रिप्ट दोनों का समर्थन करता है:

setTimeout(function(){ /* an anonymous function */ }, 100)

var f = function(){ /* function ref */ }

यह वह जगह है जहाँ JS अपनी शक्ति और लचीलापन प्राप्त करता है। जावा पहले कुछ हद तक (अनाम इंटरफ़ेस कार्यान्वयन) का समर्थन करता है, लेकिन बाद वाला नहीं - जावा 8 के अपडेट के लिए नीचे देखें।

मेरे लिए इसकी अस्पष्ट (या दोनों) एक लंबोदर की उचित परिभाषा है।

जेएस निश्चित रूप से इन सुविधाओं का समर्थन करने वाली पहली भाषा नहीं है। स्मृति से जाने पर, मुझे लगता है कि इसकी स्मालटॉक कि भाषा के प्रति उत्साही हमेशा लंबोदर का समर्थन करते हैं।

BTW: जावा में, एक अनाम वर्ग आमतौर पर एक तर्क के लिए मक्खी पर एक वर्ग परिभाषा में पारित करने के लिए उपयोग किया जाता है (स्विंग में बहुत अधिक उपयोग किया जाता है)। कुछ इस तरह (स्मृति से, संकलित नहीं):

someGuiContainer(new WidgetInterface()
      {
           public void importantMethodToDefine(){
             // Handle having the method called in my special widget way
           }
        }
)

अपडेट करें

जावा, 8 के रूप में, अब आधिकारिक तौर पर एक लैम्ब्डा भाषा है।

अब आप निम्नलिखित सिंटैक्स का उपयोग कर सकते हैं:

MathOperation addition = (int a, int b) -> a + b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));

कोड स्रोत


1

एमआईटी के ओपन कोर्स-वेयर नामक संरचना और कंप्यूटर प्रोग्राम की व्याख्या में हैल एबेल्सन, जेरी सुस्मैन और जूली सुस्मैन की पुस्तक। वे स्कीम पर चर्चा करते हैं, जो कि LISP की एक बोली है और वहां वे बहुत विस्तृत और स्पष्ट विवरण देते हैं कि लैम्ब्डा क्या है और स्कीम LISP और सामान्य भाषाएं हैं। यदि आप कंप्यूटर प्रोग्रामिंग की वास्तव में स्पष्ट और गहरी समझ चाहते हैं तो मैं आपको इसे देखने की सलाह देता हूं। आपको समझाने के लिए तीन बार उतना ही समय लगेगा जितना कि आप वहां गए और सिर्फ किताब पढ़ी या ट्यूटोरियल देखें जो इसे पूरी तरह से समझाता है, यह जीनियस है।

जावास्क्रिप्ट मुख्य रूप से भाषा योजना पर आधारित है और यह लिस्प पिता है, और इसके अलावा इसने अपनी लैमडा संरचना को लिया और इसके साथ मुख्यधारा में चला गया।


0

विकिपीडिया से: लिस्प और पायथन जैसी प्रोग्रामिंग भाषाओं में, लैम्ब्डा एक ऑपरेटर है जिसका उपयोग लैम्बडा कैलकुलस के उपयोग के बाद अनाम कार्यों या क्लोजर को दर्शाने के लिए किया जाता है। पायथन भाषा में लैम्ब्डा के इस उपयोग का एक उदाहरण कंप्यूटर कोड का यह खंड है जो प्रत्येक प्रविष्टि के अंतिम वर्ण द्वारा वर्णानुक्रम में एक सूची को क्रमबद्ध करता है:

>>> list = ['woman', 'man', 'horse', 'boat', 'plane', 'dog']
>>> sorted(list, key=lambda word: word[-1])
['horse', 'plane', 'dog', 'woman', 'man', 'boat']

* In the C# programming language a lambda expression is an anonymous function that can contain expressions and statements

0
  • जावास्क्रिप्ट एक बेनामी फ़ंक्शन को परिभाषित करने की अनुमति देता है जो एक फ़ंक्शन है जो एक पहचानकर्ता के लिए बाध्य नहीं है। इस तरह के फ़ंक्शन को लैम्ब्डा एब्स्ट्रेक्शन के रूप में भी जाना जाता है और जेएस समर्थन के बाद से इसे लैम्बडा भाषा के रूप में जाना जाता है।

  • गुण: किसी फ़ंक्शन के तुरंत निष्पादन या अल्पकालिक उपयोग के लिए इस फ़ंक्शन की आवश्यकता होती है, जहां फ़ंक्शन को नाम देने का कोई महत्व नहीं है।

  • यह जावा, सी, सी ++ और पीएचपी जैसी भाषाओं से अलग है क्योंकि जेएस बेनामी कार्यों में क्लोजर और करी के लिए उपयोग किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.