क्या कोई प्रोग्रामिंग भाषा सामान्य पुनरावर्ती कार्यों को अपने आधार के रूप में उपयोग करती है?


23

यह एक भोलापन है और इसलिए, संभवतः विकृत सवाल है, इसलिए अग्रिम में माफी!

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

मुझे हाल ही में पता चला है कि चर्च-ट्यूरिंग थीसिस भी गणना के तीसरे मॉडल के साथ आपसी सामंजस्य दिखाता है: सामान्य पुनरावर्ती कार्य । क्या कोई प्रोग्रामिंग लैंग्वेज हैं जो इसे अपने कंपीटिशन के मॉडल के रूप में इस्तेमाल करती हैं? यदि नहीं, तो क्या कोई तकनीकी कारण है; "इसके अलावा," अभी तक किसी ने कोशिश नहीं की है?


1
मैं कहूंगा कि ट्यूरिंग मशीन या यूनिवर्सल रजिस्टर मशीनें प्रोसेसर PLs (असेंबली PLs) का एक आधार हैं। उनके पास कार्य नहीं हैं। -आकर्षक कार्य अनिवार्य PLs का एक आधार हैं। उनके पास उच्च-क्रम के कार्य नहीं हैं। μ
बिराल

1
मैं पहले-क्रम तर्क और प्रोलॉग में देखने की भी सिफारिश करूंगा।
बिराल

1
C ++ 11 से पहले constexprआप संकलक द्वारा संकलित समय पर किए गए अभिकलन के लिए '(' को) 'खाके' का उपयोग कर सकते थे। टेम्पलेट्स पर प्रतिबंध लूप की अनुमति नहीं देता है, लेकिन आप किसी भी लूप का अनुकरण करने के लिए पुनरावृत्ति का उपयोग कर सकते हैं, ताकि आप C ++ भाषा मानक के हिस्से के रूप में ट्यूरिंग-पूर्ण (मेटा-प्रोग्रामिंग) सुविधा के साथ समाप्त हो जाएं, उदाहरण के लिए देखें stackoverflow.com/estestions / 189172 / सी-टेम्परिंग-ट्यूरिंग-पूरा
जिमीबी

1
यह भी देखें en.wikipedia.org/wiki/Template_metaprogramming
JimmyB

जवाबों:


45

प्रश्न का सीधा उत्तर: हाँ, -ccursive फ़ंक्शन (व्हॉट्सएप) पर आधारित गूढ़ और अत्यधिक अव्यावहारिक PLs हैं , लेकिन कोई व्यावहारिक प्रोग्रामिंग भाषा μ -ccursive कार्यों पर मान्य कारणों के कारण आधारित नहीं है।μμ

सामान्य पुनरावर्ती (यानी, ) कार्य लंबोदर कैल्सी की तुलना में काफी कम अभिव्यंजक हैं । इस प्रकार, वे प्रोग्रामिंग भाषाओं के लिए एक खराब नींव बनाते हैं। आप यह भी सही नहीं हैं कि TM अनिवार्य PLs का आधार है: वास्तव में, अच्छी अत्यावश्यक प्रोग्रामिंग भाषाएं λ -calculus की तुलना में बहुत करीब हैं, क्योंकि वे ट्यूरिंग मशीन हैं।μλ

संगणनात्मकता के संदर्भ में, कार्य, ट्यूरिंग मशीन, और अनकैप्ड λ -calculus सभी समान हैं। हालांकि, अप्रयुक्त एलसी में अच्छे गुण हैं जो अन्य दो में से कोई भी नहीं है। यह बहुत सरल है (केवल 3 वाक्यात्मक रूप और 2 कम्प्यूटेशनल नियम), अत्यधिक रचनात्मक है, और प्रोग्रामिंग निर्माणों को अपेक्षाकृत आसानी से व्यक्त कर सकता है। इसके अलावा, एक सरल प्रकार प्रणाली से लैस (जैसे, प्रणाली एफ ω के साथ बढ़ाया मैं x ), λ -calculus अत्यंत अर्थपूर्ण हो सकता है कि यह सही ढंग से और संघटनात्मक आसानी से कई जटिल प्रोग्रामिंग निर्माणों व्यक्त कर सकते हैं,। आप λ का विस्तार भी कर सकते हैंμλFωfixλλ-कैंक्लस आसानी से ऐसे निर्माणों को शामिल करना है जो लंबोदा नहीं हैं। ऊपर वर्णित अन्य कम्प्यूटेशनल मॉडल में से कोई भी आपको उन अच्छे गुणों को नहीं देता है।

ट्यूरिंग मशीन न तो संरचनागत है और न ही सार्वभौमिक (आपको प्रत्येक समस्या के लिए एक टीएम की आवश्यकता है)। "फ़ंक्शन", "चर" या "रचना" की कोई अवधारणा नहीं है। यह भी बिल्कुल सही नहीं है कि TM अनिवार्य PLs का आधार हैं - FWIW, अनिवार्य PLs, ट्यूरिंग मशीनों की तुलना में नियंत्रण ऑपरेटरों के साथ लैम्ब्डा कैल्सी के बहुत करीब हैं। विस्तृत विवरण के लिए पीटर जे। लैंडिन का "ALGOL 60 और चर्च के लैम्ब्डा-संकेतन के बीच एक पत्राचार" देखें । यदि आपने ब्रेनफ ** k (जो वास्तव में एक सरल ट्यूरिंग मशीन लागू करता है) में प्रोग्राम किया है, तो आपको पता चल जाएगा कि ट्यूरिंग मशीन प्रोग्रामिंग के लिए एक अच्छा विचार नहीं है।

μμμN

λλμλλ

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

इसके अलावा, कई गैर-ट्यूरिंग पूर्ण कम्प्यूटेशनल सिस्टम प्रोग्रामिंग के लिए बहुत उपयोगी होते हैं। नियमित अभिव्यक्ति और yacc ट्यूरिंग पूर्ण नहीं हैं, लेकिन वे समस्याओं के एक निश्चित वर्ग को हल करने में बेहद शक्तिशाली हैं। कोक भी ट्यूरिंग पूर्ण नहीं है, लेकिन यह अविश्वसनीय रूप से शक्तिशाली है (यह वास्तव में अपने ट्यूरिंग पूर्ण चचेरे भाई, ओकेम्ल की तुलना में अधिक अभिव्यंजक माना जाता है )। जब प्रोग्रामिंग की बात आती है, तो ट्यूरिंग संपूर्णता कुंजी नहीं है, क्योंकि बहुत से (करीब) बेकार सिस्टम निर्बाध रूप से ट्यूरिंग पूर्ण हैं। आप यह दावा नहीं करने जा रहे हैं कि ब्रेनफ ** k या व्हॉट्सएप Coq की तुलना में अधिक शक्तिशाली प्रोग्रामिंग भाषाएं हैं, क्या आप हैं? एक अभिव्यंजक नींव शक्तिशाली प्रोग्रामिंग भाषाओं की कुंजी है, और यही कारण है कि आधुनिक प्रोग्रामिंग भाषाएं लगभग हमेशा पर आधारित होती हैंλ-calculus।


7
"कॉनवे के साथ कोई भी कार्यक्रम नहीं" ... कुछ लोग कॉनवे के गेम ऑफ लाइफ में टेट्रिस का एक कार्यशील गेम बनाते हैं ... वास्तव में यह
व्हाट्सएप के

λλ

@AlexeiLevenkov यह पूरी तरह से असत्य है। व्हॉट्सएप अनिवार्य रूप से एक सरल (सरल) अनिवार्य भाषा है, जिसमें एक अजीब वाक्यविन्यास है। इसमें अंकगणित, बुनियादी नियंत्रण प्रवाह, ढेर और ढेर हेरफेर, और आई / ओ के लिए सुविधाएं हैं । दूसरी ओर, QFT परियोजना, एक बहुत सरल भाषा से कंपाइलर को डिजाइन करने के लिए नीचे एक RISC असेंबली के लिए बनाई गई है जो एक वायरवर्ल्ड-जैसे सेलुलर ऑटोमैटन के भीतर निर्मित CPU के लिए बनाया गया है, जिसका उपयोग OTCA मेटाप्लाइल्स द्वारा किया जाता है
गैर

@AlexeiLevenkov परम Cogol → CGoL कंपाइलर को चार वर्षों में कई लोगों के काम की आवश्यकता होती है, जबकि HaPyLi नामक एक परियोजना मौजूद है , जो व्हॉट्सएप को कहीं अधिक जटिल भाषा का संकलन करता है, जो कि उनके खाली समय में एक व्यक्ति द्वारा लिखा गया था।
गैर

4

µ-recursive function programming languageGoogle में टाइप करने से मुझे इस GitHub रेपो में लाया गया , इसलिए आपके प्रश्न का उत्तर है:

हां, और इसे मायोपिया कहा जाता है

वैसे हास्केल में लिखा है।


μ

2
बेशक। मैंने सिर्फ यह मान लिया कि ओपी इस तरह की भाषा को सिद्धांत या किसी चीज़ का अध्ययन करना चाहता है, न कि वास्तव में इसके साथ दुनिया को जीतना है ;-)
कपोल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.