मुझे पता है कि, अनिवार्य प्रोग्रामिंग भाषाओं में, एक टिंग-डू लूप भाषा को ट्यूरिंग-कम्प्लीट करने के लिए कंट्रोल फ्लो कंस्ट्रक्शन के रूप में पर्याप्त है (जहाँ तक कंट्रोल फ्लो जाता है - बेशक हमें अनबाउंड मेमोरी और कुछ ऑपरेटर्स की भी आवश्यकता है ...) । मेरे प्रश्न का सार यह है: क्या लूप करते समय लूप के समान कम्प्यूटेशनल शक्ति होती है? दूसरे शब्दों में, क्या कोई भाषा ट्यूरिंग-पूर्ण हो सकती है यदि निर्देशों को पूरी तरह से छोड़ना असंभव है।
मुझे एहसास है कि यहाँ कुछ शब्दार्थ थोड़ा अस्पष्ट हो सकता है, इसलिए मुझे एक विशिष्ट उदाहरण के साथ वास्तविक प्रश्न का वाक्यांश देना चाहिए:
Brainfuck (BF) एक ट्यूरिंग टारपीट है जहां एकमात्र नियंत्रण प्रवाह एक डू-डू लूप है, जिसे इस रूप में दर्शाया जाता है [...]
(सवाल के तल पर एक पूर्ण भाषा युक्ति है, यदि आप Brainfuck से परिचित नहीं हैं)। आइए एक नई भाषा बीएफ * को परिभाषित करें, जहां ,.+-<>
बीएफ के रूप में एक ही शब्दार्थ है, लेकिन इसके बजाय []
हमारे पास {}
एक डू-लूप है। यही है, बीएफ के लिए एकमात्र अंतर यह है कि प्रत्येक लूप को कम से कम एक बार निष्पादित किया जाता है इससे पहले कि पुनरावृत्तियों को छोड़ दिया जा सकता है।
क्या BF * ट्यूरिंग-पूर्ण है? यदि यह है, तो मैं दिलचस्पी लेता हूँ कि मैं BF से BF * में कैसे अनुवाद कर सकता हूँ। यदि ऐसा नहीं है, तो मैं यह कैसे साबित करूं?
मेरे स्वयं के कुछ अवलोकन:
- हर BF प्रोग्राम को BF * में ट्रांसलेट नहीं किया जा सकता है। उदाहरण के लिए, बीएफ * में एक प्रोग्राम लिखना असंभव है जो मूल्य को पढ़ या प्रिंट नहीं कर सकता है - यदि प्रोग्राम संभावित रूप से एक या अधिक मान प्रिंट करता है, तो यह हमेशा कम से कम एक प्रिंट करेगा। हालांकि, बीएफ का ट्यूरिंग-पूर्ण उपसमुच्चय हो सकता है जिसे बीएफ * में अनुवाद किया जा सकता है।
- हम केवल अनुवाद नहीं कर सकते हैं
[f]
(जहांf
कुछ मनमाना है, ब्रेनफक प्रोग्राम जिसमें केवल शामिल है+-[]<>
) (पहले पुनरावृत्ति के प्रभाव को रद्द करने के प्रयास में), क्योंकि क) प्रत्येक कम्प्यूटेशनल फ़ंक्शन का एक कम्प्यूटेशनल उलटा और ख नहीं है) भले ही उन्होंने किया हो जरूरी नहीं है कि इस चरण को लागू करने की तुलना में कम लूप न हों, पहली जगह में समाप्त करने की गारंटी नहीं है।f-1{f}
f-1
f
यहां ब्रेनफक भाषा पर एक त्वरित अवलोकन है। ब्रेनफैक एक अनंत टेप पर संचालित होता है, जहां प्रत्येक सेल में एक बाइट मान होता है, शुरू में शून्य। ओवरफ्लो चारों ओर लपेटता है, इसलिए 255 की वृद्धि में 0 और इसके विपरीत देता है। भाषा में 8 निर्देश शामिल हैं:
+ Increment the current cell.
- Decrement the current cell.
> Move tape head to the right.
< Move tape head to the left.
, Input a character from STDIN into the current cell.
. Output the current cell as a character to STDOUT.
[ If the current cell is zero, jump past the matching ].
] If the current cell is non-zero, jump back to just behind the matching [.
[]
बीएफ में "लूप" करते समय बिल्कुल परिभाषित नहीं है। जैसा कि आपकी तालिका में बाएँ और दाएँ कोष्ठक वर्तमान सेल शून्य / नॉनज़रो का मूल्यांकन करते हैं। तो इसी {}
ब्रेसिज़ मूल्यांकन तर्क का सटीक वर्णन क्या है ? कंप्यूटर विज्ञान चैट में आगे के संवाद / चर्चा का सुझाव दें । यह भी कि आपके "अवलोकनों" को बिना प्रमाण के "पोस्ट-डिजिट" या "प्रस्ताव" पसंद हैं।
{}
होगी {
कि कुछ भी न करें और }
जैसा है वैसा ही करें ]
। अगले कुछ दिनों में मेरे पास ज्यादा समय नहीं होगा, लेकिन जब मैं कुछ समय पाऊंगा तो मैं आपसे चैट में शामिल हो जाऊंगा।
{}
और दूर ले जाने के साथ []
, बीएफ * ट्यूरिंग पूर्ण है। समझ है कि बीएफ साथ []
एक निर्माण है केवल करने के लिए कुछ हद तक की तरह / अनुरूप कुछ पूरा भाषाओं ट्यूरिंग में एक पाश जबकि-से करते हैं।