प्रोग्रामिंग भाषा जहां हर अभिव्यक्ति समझ में आता है


23

सिफारिश के अनुसार मैं इसे स्टैक ओवरफ्लो से रीपोस्ट कर रहा हूं ।

हाल ही में मैं निम्नलिखित मुद्दे के बारे में सोच रहा हूं।

मानक के लिए कोड पर विचार करें "हैलो वर्ल्ड!" कार्यक्रम:

main()
{
    printf("Hello World");

}

अब इस कोड में लगभग कोई भी बदलाव इसे पूरी तरह से बेकार कर देगा, वास्तव में लगभग हर परिवर्तन कोड को संकलन करने से रोक देगा। उदाहरण के लिए:

main(5
{
    printf("Hello World");

}

अब वास्तविक प्रश्न पर। क्या कोई प्रोग्रामिंग भाषा है जहाँ प्रतीकों का हर संभव संयोजन है - अर्थात, हर अभिव्यक्ति - समझ में आता है? मैंने कुछ हल के बारे में सोचने की कोशिश की और दो के साथ आया:

  1. चर की सीमित संख्या के साथ उपसर्ग। किसी भी कोड को लिखने से पहले अनिवार्य रूप से सभी चर पहले से ही परिभाषित हैं और आपको बस उनके साथ काम करना है। सैद्धांतिक रूप से आप कई सरल कार्यक्रमों की एक श्रृंखला बनाकर मनमाने ढंग से कई कार्य कर सकते हैं, उनमें से प्रत्येक दूसरों को परिणाम खिला सकता है। कोड को उपसर्ग संकेतन में वर्णों की एक श्रृंखला के रूप में लिखा जा सकता है;

  2. चरों के ढेर के साथ "पोस्टफिक्स"। चर एक स्टैक पर संग्रहीत होते हैं; प्रत्येक ऑपरेशन शीर्ष से दो चर लेता है और उनके स्थान पर परिणाम डालता है। अंतिम ऑपरेशन या वेरिएबल तक पहुंचने पर प्रोग्राम समाप्त हो जाता है।

व्यक्तिगत रूप से मुझे इन दोनों से नफरत है। न केवल वे सीमित हैं, वे अपात्र हैं। वे वास्तविक समाधान भी नहीं हैं, वर्कअराउंड की तरह अधिक, अनिवार्य रूप से "ऑफशोरिंग" कुछ काम एक बाहरी प्रक्रिया के लिए।

क्या किसी को कोई अन्य विचार है कि इस समस्या को कैसे हल किया जाए?


48
एक कंपाइलर को देखते हुए , एक नया कंपाइलर बनाएं जो निम्नानुसार काम करता है: दिए गए स्रोत , इसे को पास करें । यदि खुश है और एक निष्पादन योग्य बनाता है, तो वह यह है, लेकिन यदि शिकायत करता है, तो एक निष्पादन योग्य को आउटपुट करता है जो संकलक को प्रिंट करता प्रत्येक स्ट्रिंग को एक वैध प्रोग्राम के रूप में स्वीकार करता है। C s C C C C सीसी'रोंसीसीसीYou are a bimbo.सी'
बाउर

1
BF को एक मिलान [ ]कमांड (विकी पेज के अनुसार) की आवश्यकता है। मेरा विचार सीपीयू ऑपकोड को देखना था। लेकिन फिर भी, कुछ पैटर्न एक समस्या उत्पन्न कर सकते हैं (उदाहरण के लिए, अगर एक ओपकोड 3 बिट्स है, लेकिन आपका प्रोग्राम केवल 2 बिट्स है।) कुछ अतिरिक्त 0 बिट्स के साथ संभवतः पैडिंग के इस मुद्दे को छोड़कर, कोई भी सीपीयू के साथ किसी भी सीपीयू पर सोच सकता है। पूरा ओपकोड सेट जो दावे को संतुष्ट करेगा "हर स्ट्रिंग एक वैध कार्यक्रम है"। शायद अर्थहीन, लेकिन फिर भी मान्य है।
रैन जी।

1
अपने हार्डवेयर को 64k RAM के साथ Z-80 CPU होने दें। एक कंपाइलर लिखें जो कि ASCII- कोडित स्रोत कोड को 64k मेमोरी (ट्रंकिंग या यदि आवश्यक हो तो शून्य-पेडिंग) में कॉपी करता है। यह संकलक कभी भी वाक्यविन्यास त्रुटि नहीं देता है।
बेन क्रॉवेल

1
@RanG। एक 'संकलक' जो किसी भी बिटस्ट्रीम को प्रोसेस करता है और इसे दिए गए प्रोसेसर के लिए ऑब्जेक्ट कोड का एक वैध बिट होने के लिए ठीक करता है, मुझे लगता है, ओपी आवश्यकताओं को पूरा करता है। यह x86 जैसे जटिल निर्देश सेट के साथ सिस्टम के लिए भी बहुत मुश्किल नहीं होगा। मैंने x86 कार्यक्रमों के रूप में यादृच्छिक बाइट्स की वैधता के बारे में एक पेपर वर्षों पहले पढ़ा था और यह पाया कि x86 वास्तव में लेखकों की तुलना में कहीं अधिक मजबूत था जो मूल रूप से अपेक्षित था।
ओटाक्यूकोड

2
आगे की स्थितियों के बिना, यह प्रश्न उबाऊ है: पर्पस की टिप्पणी और डेविड का जवाब "तुच्छ" उत्तर देता है। आपको अधिक सटीक रूप से नाखून लगाना होगा जो आप चाहते हैं।
राफेल

जवाबों:


31

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

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

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

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


1
आनुवंशिकी एक अच्छे उदाहरण की तरह नहीं लगती है। मान्य या अमान्य के संदर्भ में, क्या आप केवल प्रतिकृति के बारे में बात कर रहे हैं? बेशक हर स्ट्रिंग एक भाषा के लिए एक वैध कार्यक्रम होगा जिसमें एकमात्र संभव निर्देश है replicate this string। यह वास्तव में एक सार्थक प्रोग्रामिंग भाषा नहीं है, हालांकि, ट्यूरिंग कम्प्लीट के पास कहीं नहीं है।
टेल

2
@tel: Cort शायद प्रतिकृति के बजाय mRNA के माध्यम से प्रोटीन संश्लेषण के बारे में बात कर रहा है। बहुत अधिक किसी भी आनुवंशिक अनुक्रम को स्थानांतरित किया जा सकता है और फिर प्रोटीन संश्लेषण मशीनरी में डाला जा सकता है: क्या जो प्रोटीन निकलता है वह पर्याप्त रूप से स्थिर है कि यह पहले से ही निर्मित होने के समय तक अपमानित नहीं हुआ है, और यदि ऐसा है तो क्या यह कुछ भी उपयोगी है जीव, एक और मामला है ...
स्टीव जेसप

3
आनुवंशिक कोड स्वयं को पुन: उत्पन्न करने के लिए एक कोड नहीं है। यह (आम तौर पर) एक प्रोटीन के लिए एक कोड है। क्या प्रोटीन उपयोगी है अक्सर एक अलग सवाल है। बेशक यह अधिक दिलचस्प है। एक आनुवांशिक अनुक्रम में "कोड" के कुछ हिस्से अंत में "उस कोड को कुछ पंक्तियों के साथ एक निर्देश की तरह अधिक अंत होते हैं - जो आपको कभी-कभी इसे अनदेखा करना चाहिए।" सभी प्रकार के शांत "प्रोग्राम" सेल और वायरस ने एक दूसरे से लड़ते हुए लिखा है।
जोएल

टीईसीओ एक और वास्तविक दुनिया का उदाहरण है।
cjm

1
@cjm वाह। "एक API तब समाप्त नहीं होता है जब आपने सब कुछ जोड़ना समाप्त कर लिया है, लेकिन जब आपने सब कुछ समाप्त कर लिया है।" जब तक आप TECO नहीं होते हैं, तब आप तब समाप्त हो जाते हैं जब आप वर्णों से बाहर निकलते हैं ताकि अर्थ को असाइन किया जा सके।
Cort Ammon - मोनिका

16

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

nn

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


13

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

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

इससे निपटने का एक और तरीका सभी संभावित आदानों के शब्दार्थों को पूरी तरह से परिभाषित करना है, जिसमें यह निर्दिष्ट करना शामिल है कि प्रत्येक इनपुट के लिए संकलन-समय, लोड-टाइम या रन-टाइम त्रुटि क्या हो सकती है। यही है, " Syntax error at line 42मानक त्रुटि स्ट्रीम पर मुद्रण के बाद प्रोग्राम को निरस्त करें " भाषा के परिभाषित शब्दार्थ का हिस्सा है। हर अभिव्यक्ति "समझ में आती है" इसमें एक परिभाषित अर्थ है। क्या यह एक उपयोगी अर्थ है? हो सकता है - आखिरकार, यदि कार्यक्रम स्पष्ट रूप से गलत है, तो इसे अस्वीकार करना उपयोगी है।


12

कॉट लॉजिक के आधार पर टोटिंग-कम्प्लीट लैंग्वेज जोट की जाँच करें , जहाँ 0s और 1s का हर सीक्वेंस (एक खाली सीक्वेंस सहित) एक वैध प्रोग्राम है।


2
यह कंप्यूटर साइंस का जवाब नहीं है।
राफेल

2
@Abdulrhman यह द्विआधारी तारों और प्राकृतिक संख्याओं के बीच एक आपत्ति को परिभाषित करने के लिए सीधे आगे है। इसलिए यदि आप चाहें तो किसी भी प्रोग्राम को एक प्राकृतिक संख्या के रूप में एन्कोड कर सकते हैं।
कोडइन्चोस

7
@ राफेल कृपया विस्तृत करें, या उत्तर के सुधार का सुझाव दें, यदि आप अपनी आलोचना के लिए आधार प्रदान करते हैं तो मुझे इसमें सुधार करने में खुशी होगी।
पेट्र पुडल्क

+1, मैं प्राकृतिक संख्याओं के आधार पर एक काल्पनिक प्रोग्रामिंग भाषा के लिए एक समान उत्तर देने वाला था, लेकिन यह समान है। AFAIK में कोई प्रोग्रामिंग नहीं है (व्यावहारिक उपयोग में) जिसमें यह सुविधा है, लेकिन कोई व्यक्ति केवल संख्याओं का उपयोग करके निर्माण कर सकता है, जहां प्रत्येक संयोजन का एक अर्थ होता है (ऑपरेटरों के साथ-साथ ऑपरेटर भी) यह कुंजी है
निकोस एम।

8

एक अच्छा उदाहरण व्हॉट्सएप है । भाषा में उचित, ऑपरेटरों के किसी भी संयोजन मान्य हैं। ऑपरेटर स्पेस, टैब और न्यूलाइन हैं (विशेष रूप से "\ n")। अन्य सभी पात्रों को टिप्पणी माना जाता है

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


मैं अपना दिमाग़ जवाब देने के बाद बस यही सोच रहा था (आपका सही होने के बाद से बेहतर है), लेकिन मैं सोच रहा हूँ - क्या एक खाली कार्यक्रम अभी भी एक कार्यक्रम है? (यानी यदि वे तीन अक्षर पूरी फाइल स्ट्रीम से गायब हैं)। - जैसे, अगर मेरी कार उन सभी चीजों को याद कर रही थी जो इसे कार बनाती थी, तो क्या यह अभी भी एक कार होगी?
BrainSlugs83

यह कंप्यूटर साइंस का जवाब नहीं है। (इसके अलावा, "हर खाली स्थान के स्ट्रिंग" = "हर स्ट्रिंग"!।)
राफेल

2
@Raphael: लेकिन हर संभव स्ट्रिंग वैध खाली स्थान के प्रोग्राम (जो कि कोई खाली स्थान के शामिल सहित) कर रहे हैं - ध्यान दें कि किसी भी चरित्र है कि खाली स्थान के बस खाली स्थान के प्रोग्रामिंग भाषा में टिप्पणी कर रहे हैं एक नहीं है
slebetman

2
@slebetman आप मेरे कोष्ठक की व्याख्या भी शाब्दिक रूप से कर रहे थे। मैं अनपेक्षित लूप टोकन के बारे में बात कर रहा था। व्हाट्सएप में कुछ इसी तरह की समस्याएं हो सकती हैं: क्या बिना पूर्ववर्ती कॉल के काम पर वापस लौटना? (एन्कोडेड के रूप में [LF][Tab][LF]) यदि आप एक खाली स्टैक पॉप करते हैं तो क्या होता है? यदि आप एक अपरिभाषित लेबल पर कूदते हैं तो क्या होता है? यदि आप डुप्लिकेट लेबल को परिभाषित करते हैं तो क्या होता है?
कोडइन्चोस

7

मैं इस विचार को संबोधित करना चाहूंगा कि कई पोस्टर दिए गए हैं, ऐसी भाषा "बेकार" होगी। शायद मनुष्यों के लिए कुछ विशेष कार्य को हल करने के इरादे से, मैन्युअल रूप से लिखना बेकार होगा। हालाँकि, प्रोग्रामिंग भाषाओं के लिए बहु-उपयोग का मामला होने के बावजूद, यह निश्चित रूप से एकमात्र उपयोग-मामला नहीं है। कई उपयोग-मामले दिमाग में आते हैं जहां ऐसी भाषा उपयोगी होती है, और हम ऐसी भाषाओं के उदाहरणों के लिए उन क्षेत्रों को देख सकते हैं।

सबसे पहले Cort Ammon की आनुवंशिकी के लिए भ्रम की स्थिति है: प्रश्न में कार्यक्रम परिवर्तन (के )लिए प्रतिस्थापन 5) को उत्परिवर्तन के रूप में देखा जा सकता है । विकासवादी संगणना के क्षेत्र में इस तरह का हेरफेर आम है ; विशेष रूप से आनुवंशिक एल्गोरिदम स्ट्रिंग्स पर ऐसे परिवर्तन करते हैं , जबकि आनुवांशिक प्रोग्रामिंग कार्यक्रमों को बदल देती है । किसी भी मामले में, हम आमतौर पर हर संभावना को अर्थ प्रदान करना चाहते हैं, क्योंकि यह सबसे कॉम्पैक्ट खोज स्थान का उत्पादन करेगा।

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

एक और स्थिति जहां हम चाहते हैं कि हर स्ट्रिंग एक वैध कार्यक्रम हो, जब कार्यक्रमों की गणना हो । यह संहिताओं द्वारा उल्लिखित आक्षेप से संबंधित है, लेकिन हम कई कारणों से प्राकृतिक संख्याओं के बजाय तारों पर काम करना पसंद कर सकते हैं:

  • अगर भाषा में कुछ संरचना है, जैसे। हम सब-स्ट्रिंग्स को अर्थ प्रदान कर सकते हैं, प्राकृतिक संख्याओं में अनुवाद करते समय यह खो सकता है। इस मामले में हम स्ट्रिंग का उपयोग करना पसंद कर सकते हैं, ताकि पूरे प्रोग्राम को एक नंबर के रूप में प्रस्तुत करने के बजाय स्थानीय स्तर पर सब-स्ट्रिंग्स के बारे में तर्क और रूपांतरण कर सकें। यह इस बात के अनुरूप है कि हम अंकगणित के बजाए इंट पर बिटवाइज़ संचालन का उपयोग कैसे करना पसंद कर सकते हैं, जब प्रत्येक बिट का अलग-अलग अर्थ होता है। यह मूल रूप से विकासवादी परिदृश्य का एक सामान्यीकरण है।
  • हम मांग पर कार्यक्रम उत्पन्न करना चाहते हैं; उदाहरण के लिए, हम एक प्रोग्राम को निष्पादित करना शुरू कर सकते हैं, जो पूरी तरह से अनिर्धारित है, और केवल तभी उत्पन्न होता है (जैसे बेतरतीब ढंग से) व्यक्तिगत निर्देश (जैसे अक्षर) जब / यदि निर्देश सूचक उन तक पहुंचता है। यह एल्गोरिथम सूचना सिद्धांत में आम है, जहां कार्यक्रम ट्यूरिंग मशीन टेप है, और इसका उद्देश्य यादृच्छिक रूप से उत्पन्न कार्यक्रमों के व्यवहार की विशेषता है। उदाहरण के लिए, हम सुलैमानऑफ को मनमाने ढंग से तार से पहले तैयार कर सकते हैं क्योंकि संभावना है कि एक यादृच्छिक टेप के साथ एक सार्वभौमिक ट्यूरिंग मशीन उस स्ट्रिंग को आउटपुट करेगी।

उदाहरण भाषाओं के संदर्भ में, कई विकासवादी संगणना प्रणालियां पुश परिवार की तरह खड़ी भाषाओं पर आधारित हैं । ये टोकन की मनमानी धाराओं को अनुमति देते हैं (जिसे हम व्यक्तिगत पात्रों के रूप में दर्शा सकते हैं)। कभी-कभी (जैसे BrainSlugs83 के ब्रेनफक उदाहरण के साथ) कोष्ठक को संतुलित करने पर प्रतिबंध है; तथापि, हम करने के लिए इस से संबंधित कर सकते हैं स्वयं परिसीमन कार्यक्रमों में ऐसे ही एक स्ट्रिंग, [एक मान्य न हो कार्यक्रम है, लेकिन यह है एक वैध कार्यक्रम उपसर्ग । यदि हम स्टड से एक कंपाइलर / दुभाषिया पढ़ने के स्रोत कोड की कल्पना करते हैं, तो यह एक स्ट्रिंग को अस्वीकार नहीं करेगा [, यह जारी रखने से पहले अधिक इनपुट की प्रतीक्षा करेगा।

बाइनरी कॉम्बिनेशन लॉजिक और बाइनरी लैम्ब्डा कैलकुलस जैसी भाषाएं एल्गोरिथम सूचना सिद्धांत, जैसे काम से सीधे बाहर निकलती हैं। से http://tromp.github.io/cl/cl.html

एक न्यूनतर सार्वभौमिक कंप्यूटर का यह डिज़ाइन कोलमोगोरोव कॉम्प्लेक्सिटी की एक ठोस परिभाषा के साथ आने की मेरी इच्छा से प्रेरित था, जो व्यक्तिगत वस्तुओं की यादृच्छिकता का अध्ययन करता है।


2

वास्तविक प्रोग्रामिंग भाषाएं लोगों को अर्थ देने के लिए हैं , न कि कंप्यूटर के लिए। लगभग lyet शो के इर्द-गिर्द तैरते हुए लगभग बेतरतीब ढंग से फेरबदल वाले चिट्ठों के साथ, लोग ग्रिबिश पढ़ सकते हैं और समझ से बाहर कर सकते हैं, यहां तक ​​कि बिना मनमुटाव को देखे। बस यह सोचें कि ग्रंथों में टाइपोस और ऐसी अन्य त्रुटियों को ढूंढना कितना कठिन है।

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


0

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

( संपादित करें: यह पता चलता है कि आपको वर्ग कोष्ठक खोलने और बंद करने से मेल खाना है, लेकिन अन्यथा, उपरोक्त सत्य है।)

यह इन दो सरल तरीकों के माध्यम से इसे प्राप्त करता है:

  1. सभी आज्ञाओं को समझते हैं कि वे एक एकल बाइट हैं (BF में वे उदाहरण के लिए सभी ASCII वर्ण हैं *)।

  2. सभी पात्रों को यह समझ में नहीं आता है, यह टिप्पणी के रूप में बताता है।

प्रोग्रामिंग भाषा ट्यूरिंग पूर्ण है (मतलब, यह कुछ भी कर सकती है जो कोई अन्य भाषा कर सकती है)।

*: यह पता चलता है कि सभी बीएफ कमांड एक एकल ASCII बाइट नहीं हैं - यानी कोष्ठक का मिलान किया जाना चाहिए - इसलिए यह है कि, भाषा वहां पहले मानदंडों को पूरा नहीं करती है। - लेकिन कोई भी भाषा जो दोनों मानदंडों को पूरा करती है, वह ओपी जो मांग रही है उसे पूरा करेगी।


2
इतना ही नहीं इस सवाल का जवाब नहीं है, यह एक कंप्यूटर विज्ञान का जवाब नहीं है।
राफेल

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

1
@ राफेल ओपी का सवाल था "क्या कोई प्रोग्रामिंग भाषा है जहां प्रतीकों के हर संभव संयोजन - यानी हर अभिव्यक्ति - समझ में आती है?" - मेरा जवाब है "हां, यहां एक का एक उदाहरण है जो करीब आता है, और यहां इसके पीछे सिद्धांत है।" - ओपी की आवश्यकताओं को पूरा करने वाली भाषाओं के एक वर्ग के लिए सटीक नियम बिछाने के अलावा, मुझे यकीन नहीं है कि यहां विज्ञान के लिए कितना अधिक स्थान है। क्या आप एक संसाधन का एक उदाहरण या लिंक दे सकते हैं जो आप यहाँ देखने की उम्मीद कर रहे हैं? -- धन्यवाद।
ब्रेनस्ल्गस83

2
डेविड और गाइल्स कंप्यूटर विज्ञान के उत्तर देते हैं। वे सिद्धांतों का पता लगाते हैं और बस यह नहीं कहते हैं, "भाषा एक्स ऐसा करता है (लगभग)"। यदि आप उनके उत्तर पढ़ते हैं, तो आप सीखेंगे कि उत्तरार्द्ध के रूप के उत्तर उबाऊ भी हैं। यह आपकी गलती नहीं है, लेकिन ओपी - प्रश्न (कंप्यूटर विज्ञान प्रश्न के रूप में) उबाऊ है; जटिलता का एक गलत अर्थ है।
राफेल

बीएफ को आसानी से "ठीक" कर सकता है ताकि किसी भी स्ट्रिंग को स्वीकार किया जाए: आप सिर्फ यह दिखावा करते हैं कि ]सभी बेजोड़ [एस से मेल खाने के लिए स्रोत के अंत में पर्याप्त वर्ण हैं , और [शुरुआत में सभी बेजोड़ मिलान करने के लिए पर्याप्त है ]। के शब्दार्थ [और ]आसानी से उन्हें इसके समकक्ष बनाने के लिए बदला जा सकता है। (उदाहरण यदि कोई मेल नहीं है ]तो [बस निष्पादन को रोक देता है यदि डेटा पॉइंटर पर बाइट शून्य है। ]बस इसी तरह की स्थिति में कार्यक्रम की शुरुआत के लिए कूदता है।) परिणामस्वरूप भाषा पूरी तरह से ट्यूरिंग होगी और किसी भी स्ट्रिंग को स्वीकार करेगी।
नथानिएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.