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


10

मैं अगले पतन के लिए एक स्नातक कंप्यूटर विज्ञान पाठ्यक्रम शुरू कर रहा हूं, लेकिन मैं कार्यात्मक प्रोग्रामिंग के संदर्भ में λ-पथरी को वास्तव में नहीं समझ सकता हूं। मैं इसे पूरी तरह से गलत समझ सकता हूं, लेकिन स्टैनफोर्ड एनसाइक्लोपीडिया ऑफ फिलॉसफी की इस परिभाषा के आधार पर , यह केवल कार्यों के लिए एक और संकेतन है।

यदि यह है कि अभी, क्यों यह नियमित रूप से समारोह अंकन ओवर-पथरी λ उपयोग करने के लिए एल्गोरिथ्म रन समय की गणना करने में लाभदायक है?


5
यह "कार्यों के लिए सिर्फ एक और संकेतन" नहीं है, लेकिन "कार्यों के लिए पहली संकेतन" है।
बाउर

सुझाव के लिए धन्यवाद, @ कवीह। मैं इसे भविष्य के पदों के लिए ध्यान में रखूंगा, हालांकि mhelvens का उत्तर उत्कृष्ट है, इसलिए क्रॉसपोस्ट की कोई आवश्यकता नहीं है।

यह एक औपचारिक रूप से परिभाषित पिंड है। मैं नहीं देखता कि आपकी सटीक समस्या क्या है।
राफेल

मैं वास्तव में शब्दावली को समझ नहीं पाया था या वे क्यों काम कर रहे थे जब तक कि मैं लंबोदा पथरी के बारे में नहीं जान पाया। यह बनाता है सॉफ्टवेयर निर्माण कम मनमाना लगता है।
dansalmo

जवाबों:


13

कंप्यूटर विज्ञान में हम गणितीय कठोरता के साथ स्रोत-कोड का विश्लेषण और समझना चाहते हैं। यह पूरी तरह से निश्चित गुणों के साथ दिलचस्प गुणों (जैसे समाप्ति) को साबित करने का एकमात्र तरीका है। इसके लिए हमें हर निर्माण के लिए एक बहुत अच्छी तरह से परिभाषित अर्थ वाली भाषा की आवश्यकता है।

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

मूल -calculus एक कार्यात्मक प्रोग्रामिंग भाषा की तरह है, लेकिन बहुत सारे 'सामान' के साथ। यह महत्वपूर्ण नहीं है कि यह वास्तव में कार्यक्रमों को लिखने के लिए एक अच्छी भाषा हो, न ही यह एक कुशल भाषा हो। बस यह है कि यह सरल और अभिव्यंजक है। उदाहरण के लिए, हमें छोरों की आवश्यकता नहीं है, क्योंकि हम उन्हें पुनरावृत्ति के साथ अनुकरण कर सकते हैं। और हमें कई मापदंडों के साथ कार्यों की आवश्यकता नहीं है, क्योंकि हम उन्हें करी के साथ अनुकरण कर सकते हैं ।λ

अब, कुछ बिंदु पर आप उन निर्माणों के बारे में गुणों को सिद्ध करना चाह सकते हैं जो मूल (अप्रकाशित) -calculus का हिस्सा नहीं हैं । इसलिए कंप्यूटर वैज्ञानिकों ने इसे अलग-अलग दिशाओं में वर्षों से बढ़ाया है। उदाहरण के लिए, टाइप-सिस्टम के बारे में टाइप करने के लिए टाइप किए गए λ -calculi की बहुत सारी विविधताएं हैं ।λλ


3
imo, कुछ कंप्यूटर विज्ञान स्रोत कोड को समझने के बारे में हो सकता है, लेकिन यह कहना सामान्य ज्ञान में सच है जैसे भौतिकी गणितीय कठोरता के साथ रॉकेट को समझने के बारे में है। कंप्यूटर विज्ञान संगणना के बारे में है। एक संबंधित शिकायत यह है कि भाषा की दक्षता मायने रखती है अगर आप दक्षता का अध्ययन करना चाहते हैं और अच्छी तरह से गठित स्रोत कोड नहीं। इस अर्थ में, TM के बारे में सोचना शायद बेहतर होगा क्योंकि दक्षतापूर्ण भाषाओं के एक मॉडल के बजाय दक्षता के बारे में सोचने के लिए (और दोनों उद्देश्यों के लिए शब्द-रैम एक बेहतर विकल्प हो सकता है)
Sasho Nikolov

btw जो मैंने ऊपर लिखा है, उसका मतलब यह नहीं है कि मुझे आपका जवाब पसंद नहीं है :)
साशो निकोलेव

माना। ;-) निश्चित।
mhelvens

1
ट्यूरिंग मशीन अनिवार्य कोड के बारे में तर्क पर अत्याचार कर रहे हैं, यह एक सरल जबकि टाइप भाषा की तरह एक खिलौना भाषा का उपयोग करने के लिए बहुत आसान है । stackoverflow.com/questions/507310/the-ward-language । जटिलता सिद्धांत में अंतर्दृष्टि के लिए ट्यूरिंग मशीन बहुत उपयोगी हैं।
कोड़ी

1

λλ

यदि यह है कि अभी, क्यों यह नियमित रूप से समारोह अंकन ओवर-पथरी λ उपयोग करने के लिए एल्गोरिथ्म रन समय की गणना करने में लाभदायक है?

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

एक और मुख्य लाभ वाक्यात्मक सरलता है। अन्य भाषाओं के लिए पार्सर बहुत जटिल हैं लेकिन लिस्प पार्सर बहुत सरल हैं। इसलिए लिस्प एक महान भाषा है, जिसमें पार्स करने के सिद्धांत का अध्ययन किया जाता है।

एक अन्य प्रमुख पहलू "कंप्यूटर-वैज्ञानिक" परिप्रेक्ष्य के बजाय तार्किक या गणितीय लेंस / दृश्य से सॉफ़्टवेयर का विश्लेषण कर रहा है।

जैसा कि अन्य उत्तर बताते हैं, लिस्प पुनरावृत्ति के बजाय पुनरावृत्ति के बारे में है और सीएस के दिल में पुनरावृत्ति बहुत अधिक है।

λ

[1] एबेल्सन और सुस्मान द्वारा कंप्यूटर प्रोग्राम की संरचना और व्याख्या

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