कार्यात्मक प्रोग्रामिंग के बाहर लैम्ब्डा कैलकुलस?


21

मैं एक विश्वविद्यालय का छात्र हूं और वर्तमान में हम लैंबडा कैलकुलस पढ़ रहे हैं। हालाँकि, मुझे अभी भी यह समझने में कठिन समय है कि यह मेरे लिए क्यों उपयोगी है। मुझे एहसास है कि यदि आप कार्यात्मक प्रोग्रामिंग का भार उठाते हैं तो यह उपयोगी हो सकता है, हालांकि मुझे लगता है कि यह वास्तव में कार्यात्मक प्रोग्रामिंग सीखने के लिए आवश्यक नहीं है, आपको क्या लगता है?

दूसरे, क्या कंप्यूटर साइंस के दायरे में लेकिन कार्यात्मक प्रोग्रामिंग भाषाओं के बाहर लैंबडा कैलकुलस का कोई उपयोग है?

जवाबों:


15

लैम्ब्डा कैलकुलस तर्क, श्रेणी सिद्धांत, प्रकार सिद्धांत, औपचारिक सत्यापन, ... मूल रूप से, प्रोग्रामिंग भाषा शब्दार्थ और औपचारिक तर्क के साथ कुछ भी करने के लिए मौलिक है। यह ऐसी मौलिक औपचारिकता है कि इन क्षेत्रों में काम करने वाले लोग इसके लाभ पर सवाल नहीं उठाते हैं।

मुझे लगता है कि यह कार्यात्मक प्रोग्रामिंग को समझने के लिए बेहद उपयोगी है क्योंकि यह आपको कार्यात्मक प्रोग्रामिंग का सार देता है। कार्य, आवेदन, प्रतिस्थापन। इसके आधार पर आप कार्यात्मक कार्यक्रमों और उनमें परिवर्तन के बारे में तर्क देने में अपने कौशल का निर्माण कर सकते हैं। उच्च-क्रम के कार्य एक हवा हैं।

सुनिश्चित करें कि आप लैम्ब्डा पथरी के बिना कार्यात्मक प्रोग्रामिंग सीख सकते हैं, लेकिन आप इसके बिना कार्यात्मक प्रोग्रामिंग को कभी नहीं समझ पाएंगे।


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

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

ठीक है कि दिलचस्प धन्यवाद एक गुच्छा है, अब मेरे पास इसका अध्ययन करने के लिए थोड़ा और कारण है। क्या आप जानते हैं कि लैम्ब्डा कैलकुलस का उपयोग किसी भी गैर-कार्यात्मक भाषाओं (निचले स्तरों पर) को डिजाइन करने के लिए किया जाता है?
जैकब

1
ALGOL। स्काला। अंततः, आपके प्रश्न का उत्तर देना मुश्किल है। लैम्ब्डा-कैलकुलस (अधिकांश) भाषा डिजाइनरों के लिए सामान्य ज्ञान का एक हिस्सा बन गया है और यह भाषा के डिजाइन को प्रभावित करता है, भले ही इसका स्पष्ट रूप से उपयोग न किया गया हो। स्मॉलटॉक या रूबी, जावा में अनाम कक्षाओं के ब्लॉक पर विचार करें। ये क्लोजर हैं, जो लैम्ब्डा कैलकुलस में उच्च-क्रम के कार्यों के साथ निकटता से जुड़े हुए हैं।
डेव क्लार्क

ठीक है, बहुत बहुत धन्यवाद डेव, यह बहुत सराहना की है।
याकूब

17

आप कंप्यूटर विज्ञान और तर्क के बाहर एक आवेदन के लिए पूछ रहे हैं। यह आसानी से पाया जाता है, उदाहरण के लिए बीजीय टोपोलॉजी में यह रिक्त स्थान की एक कार्टेसियन बंद श्रेणी के लिए सुविधाजनक है , nabab पर टोपोलॉजिकल रिक्त स्थान की सुविधाजनक श्रेणी देखें । औपचारिक कार्तीय बंद श्रेणियों के लिए इसी भाषा ठीक है -calculus। मुझे एक बहुत ही सरल उदाहरण के साथ उदाहरण दें कि यह कैसे काम आता है।λ

सबसे पहले, वार्मअप व्यायाम के रूप में, मान लीजिए कि कोई व्यक्ति आपसे पूछता है कि क्या कार्य को द्वारा परिभाषित किया गया है अलग है। आपको वास्तव में यह साबित करने की आवश्यकता नहीं है कि यह है, आप सिर्फ यह मानते हैं कि यह अलग-अलग कार्यों की संरचना है, इसलिए अलग-अलग है। दूसरे शब्दों में, आप के आधार पर एक आसान निष्कर्ष बनाया प्रपत्र परिभाषा की। f ( x ) = x 2 e x + लॉग ( 1 + x 2 )f:RRf(x)=x2ex+log(1+x2)

अब असली उदाहरण के लिए। मान लीजिए कि कोई आपसे पूछता है कि क्या फ़ंक्शन को द्वारा परिभाषित किया गया है निरंतर है। फिर, हम तुरंत "हां" का जवाब दे सकता है क्योंकि फ़ंक्शन को -calculus का उपयोग करके परिभाषित किया गया है और निरंतर मैप्स , , , आदि से शुरू होता है ।f:RR

f(x)=(λf:C(R).xxf(1+t2)dt)(λy:R.max(x,sin(y+3))
λmaxsin

Lambda -calculus के विभिन्न एक्सटेंशन अन्य क्षेत्रों में एक ही तरह का काम करना संभव बनाते हैं। उदाहरण के लिए, क्योंकि एक चिकनी टोपोस एक कार्टेजियन क्लोज्ड श्रेणी है, कोई भी मानचित्र जो -calculus का उपयोग करके परिभाषित किया गया है , जो कि डेरिवेटिव से शुरू होता है और वास्तविक की रिंग संरचना (और आप चाहें तो घातीय फ़ंक्शन में फेंक सकते हैं) चिकनी। (वास्तव में, चिकने टोपोस का मुख्य जोर निस्पृहेंट इनफ़िनिटिमल्स का अस्तित्व है, जो आपको सार्थक रूप से ऐसी बातें कहने की अनुमति देता है जैसे "हम एक डिस्क को असीम रूप से पतले समद्विबाहु त्रिभुजों में विभाजित करते हैं"।λλλ


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

आह, बहुत बुरा, मैंने उस बारे में विस्तृत प्रतिक्रिया लिखी होगी।
बाउर

उस बारे में माफी। अगर आपको कोई अतिरिक्त जानकारी जोड़ने का मन हो तो बेझिझक टिप्पणी करें :)
याकूब

2
मुझे लगता है कि दवे का सवाल ठीक है, मुझे कुछ नहीं जोड़ना है। यदि आप यह देखना चाहते हैं कि -calculus के साथ आप कौन सी रोमांचक चीजें कर सकते हैं , तो शायद आप असंभव कार्यात्मक लोगों पर एक नज़र डाल सकते हैं। लेकिन एक सामान्य जवाब के रूप में, डेव बहुत अच्छा है। λ
बाउर

7

-calculus को देखने का एक तरीका पैरामीटरिंग प्रोग्राम्स का एक सरल और ट्रिक मॉडल है। आप लगभग किसी भी प्रोग्रामिंग भाषा में कोड को पैरामीटर करते हैं, जिसमें फ़ंक्शन, प्रक्रियाएं या विधियां होती हैं, और किसी भी भाषा में मॉड्यूल होते हैं या जो आपको प्रकारों को पैरामीटर करने में सक्षम बनाता है। पैरामीटर पुन: उपयोग का एक रूप है। चूंकि λ -calculus इतना सरल है, कई प्रोग्रामिंग भाषाओं के बीच की समानताएं जो आपको कोड को पैरामीटर करने में सक्षम बनाती हैं, विशेष रूप से स्पष्ट रूप से सामने आती हैं।λλ

यह निश्चित रूप से -culculus के बारे में जाने बिना एक बहुत अच्छा प्रोग्रामर होना संभव है , लेकिन आप कुछ सुंदर को याद कर रहे हैं जो बहुत उपयोगी भी है।λ


5

Microsoft LINQ (भाषा सम्मिलित क्वेरी) प्रक्रियात्मक भाषाओं में कार्यात्मक प्रोग्रामिंग क्षमताओं को ग्राफ्ट करता है। यह -calculus के व्यापक और काफी प्रत्यक्ष उपयोग को असंगत निर्भरता और अभिव्यक्ति के पेड़ के अलग-अलग हिस्सों के लिए बनाता है जिसे डेटाबेस सर्वर को सौंपा जा सकता है। यह उच्च वाणिज्यिक मूल्य के साथ एक अत्यंत व्यावहारिक अनुप्रयोग है।λ

मैंने एक कार्यात्मक भाषा का उपयोग करते हुए एक छोटा सा व्यावसायिक अनुप्रयोग लिखा है और मैं आपको आश्वासन दे सकता हूं कि शिक्षाविदों और शोधकर्ताओं के लिए यह सार्थक है कि वे अपने प्रक्रियात्मक चचेरे भाई की तुलना में व्यावसायिक रूप से कम उपयोगी हैं। वास्तव में यह पाठ्यक्रमों के लिए घोड़ों का सवाल है, और सभी का सबसे व्यावहारिक एक ऐसी भाषा है जो आवश्यकतानुसार प्रक्रियागत या कार्यात्मक हो सकती है। परिणामस्वरूप, कार्यात्मक क्षमताएं जिन्हें LINQ के समर्थन में (जैसे # C) में पेश किया गया था, जैसे कि -expressions, डेटाबेस प्रश्नों के संदर्भ के बाहर काफी उपयोग करते हैं।λ

इसलिए जब आप अंततः अपने आप को icky चीजें करने के लिए मजबूर पाते हैं क्योंकि आप भुगतान करना चाहते हैं, तो आप -calculus को आपकी अपेक्षा से अधिक उपयोगी पा सकते हैं, भले ही आप लगभग निश्चित रूप से एक कार्यात्मक भाषा का उपयोग नहीं करेंगेλ


2

इसके बारे में अधिक जानकारी के बिना, मैं सुनता हूं कि भाषाविद लैम्ब्डा कैलकुलस का उपयोग कर रहे हैं।

http://www.sfu.ca/~jeffpell/Ling406/LambdaAbstractionOH.pdf , https://files.nyu.edu/cb125/public/Lambda/


11
क्या आप संक्षेप में बता सकते हैं कि लिंक के पीछे क्या है? उनमें टूटने की प्रवृत्ति होती है। यह आपके उत्तर को अधिक आत्म-निहित भी बनाएगा।
जुहो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.