बीलूप और एफलूप: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Simple programming languages}}
{{abbr|'''BlooP'''|Bounded loop}} और {{abbr|'''FlooP'''|Free loop}} (बाउंडेड लूप और फ्री लूप) सरल [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] हैं जिन्हें [[डगलस हॉफ़स्टैटर]] ने अपनी पुस्तक ''गोडेल, एस्चर, बाख'' में एक बिंदु को चित्रित करने के लिए डिज़ाइन किया है।<ref>[[Douglas Hofstadter]] (1979), ''[[Gödel, Escher, Bach]]'', Basic Books, Chapter XIII.</ref> ब्लूपी [[ट्यूरिंग पूर्णता]] या नॉन-ट्यूरिंग-पूर्ण प्रोग्रामिंग लैंग्वेज है जिसकी मुख्य नियंत्रण प्रवाह संरचना एक बाउंडेड [[लूप (कंप्यूटिंग)]] है (अथार्त [[रिकर्सन (कंप्यूटर विज्ञान)]] की अनुमति नहीं है)। लैंग्वेज के सभी प्रोग्राम समाप्त होने चाहिए, और यह लैंग्वेज केवल [[आदिम पुनरावर्ती कार्य|प्रिमिटिव रिकर्सिव फंक्शन]] को व्यक्त कर सकती है।<ref>[http://plato.stanford.edu/entries/computability/ Stanford Encyclopedia of Philosophy:  Computability and Complexity]</ref>
{{abbr|'''BlooP'''|Bounded loop}} और {{abbr|'''FlooP'''             (बाउंडेड लूप और फ्री लूप) सरल   
                                  |Free loop}} (बाउंडेड लूप और फ्री लूप हैं जिन्हें �ामिंग भाषा|प्रोग� ने अपनी पुस्तक �ज]] हैं जिन्हें [[ड� में एक बिंदु को चित्रित करने के लिए डिज़ाइन किया है। एक बिंदु को चित्रित करने के लिए डिज़ा ब्लूपी एक ��<ref>[[Douglas Hofstadter]] (1979), ''[[Gödel, या गैर-ट्यूरिंग-पूर्ण प्रोग्रामिंग लैंग्वेज है जिसकी मुख्य नियंत्रण प्रवाह संरचना एक बाउंडेड �� जिसकी मुख्य निय� है (अथार्त �ह संरचना एक बाउंडेड [[लूप (कं� की अनुमति नहीं है)। लैंग्वेज के सभी प्रोग्राम समाप्त होने चाहिए, और यह लैंग्वेज केवल ्रोग्राम समाप्त होने चाहिए, और यह लैंग्वेज  केवल [[आद� को व्यक्त कर सकती है।्रिमिटिव  रिकर्सिव फंक्शन]] को व्यक्त कर सकती है।<
 
फ़्लूपी ब्लूपी के समान है, अतिरिक्त इसके कि यह अनबाउंड लूप का समर्थन करता है; यह एक ट्यूरिंग-पूर्ण लैंग्वेज  है और सभी [[गणना योग्य कार्य]] को व्यक्त कर सकती है। उदाहरण के लिए, यह [[एकरमैन फ़ंक्शन]] को व्यक्त कर सकता है, जो (प्रिमिटिव  पुनरावर्ती नहीं होने के कारण) ब्लूपी में नहीं लिखा जा सकता है। [[गणितीय तर्क]] में मानक शब्दावली से ऋण लेता है,<ref name="Hofstadter424">Hofstadter (1979), p. 424.</ref><ref>Thomas Forster (2003), ''[https://books.google.com/books?id=mVeTuaRwWssC&pg=PA130 Logic, Induction and Sets]'', Cambridge University Press, p. 130.</ref> हॉफ़स्टैटर फ़्लूपी के अनबाउंड लूप्स को एमयू-लूप्स कहते हैं। सभी ट्यूरिंग-पूर्ण प्रोग्रामिंग लैंग्वेज ओं की तरह, फ़्लूपी [[रुकने की समस्या|हाल्टिंग की समस्या]] से ग्रस्त है: प्रोग्राम समाप्त नहीं हो सकते हैं, और सामान्य रूप से यह तय करना संभव नहीं है कि कौन से प्रोग्राम समाप्त होते हैं।
 
ब्लूपी और फ्लोपी को गणना के मॉडल के रूप में माना जा सकता है, और कभी-कभी कम्प्यूटेबिलिटी सिखाने में इसका उपयोग किया जाता है।<ref>David Mix Barrington (2004), CMPSCI 601: Theory of Computation, University of Massachusetts Amherst, [http://www.cs.umass.edu/~barring/cs601f04/lecture/27.pdf Lecture 27].</ref>
 


फ़्लूपी ब्लूपी के समान है, अतिरिक्त इसके कि यह अनबाउंड लूप का समर्थन करता है; यह ट्यूरिंग-पूर्ण लैंग्वेज है और सभी [[गणना योग्य कार्य|कॉमपुटेबल फ़ंक्शन]] को व्यक्त कर सकती है। उदाहरण के लिए, यह [[एकरमैन फ़ंक्शन]] को व्यक्त कर सकता है, जो (प्रिमिटिव पुनरावर्ती नहीं होने के कारण) ब्लूपी में नहीं लिखा जा सकता है। [[गणितीय तर्क|गणितीय लॉजिक]] में मानक शब्दावली से ऋण लेता है, हॉफ़स्टैटर फ़्लूपी के अनबाउंड लूप्स को एमयू-लूप्स कहते हैं। सभी ट्यूरिंग-पूर्ण प्रोग्रामिंग लैंग्वेज ओं की तरह, फ़्लूपी [[रुकने की समस्या|हाल्टिंग की समस्या]] से ग्रस्त है: प्रोग्राम समाप्त नहीं हो सकते हैं, और सामान्य रूप से यह तय करना संभव नहीं है कि कौन से प्रोग्राम समाप्त होते हैं।{{Short description|Simple programming languages}}ब्लूपी और फ्लोपी को गणना के मॉडल के रूप में माना जा सकता है, और कभी-कभी कम्प्यूटेबिलिटी सिखाने में इसका उपयोग किया जाता है।<ref>David Mix Barrington (2004), CMPSCI 601: Theory of Computation, University of Massachusetts Amherst, [http://www.cs.umass.edu/~barring/cs601f04/lecture/27.pdf Lecture 27].</ref>
==ब्लूपी उदाहरण==
==ब्लूपी उदाहरण==


एकमात्र चर <code>OUTPUT</code>(प्रक्रिया का रिटर्न मान) और <code>CELL(''i'')</code> (प्राकृतिक-संख्या चर का एक असीमित अनुक्रम, स्थिरांक द्वारा अनुक्रमित, जैसा कि असीमित रजिस्टर मशीन<ref>Hofstadter refers to these cells as a set of "auxiliary variables."</ref>) में है। एकमात्र ऑपरेटर <code>⇐</code> (assignment), <code>+</code> (addition), <code>×</code> (multiplication), <code><</code> (less-than), <code>></code> (greater-than) and <code>=</code> (equals) हैं।
एकमात्र वेरिएबल <code>OUTPUT</code>(प्रक्रिया का रिटर्न मान) और <code>CELL(''i'')</code> (प्राकृतिक-संख्या वेरिएबल का एक असीमित अनुक्रम, स्थिरांक द्वारा अनुक्रमित, जैसा कि असीमित रजिस्टर मशीन<ref>Hofstadter refers to these cells as a set of "auxiliary variables."</ref>) में है। एकमात्र ऑपरेटर <code>⇐</code> (assignment), <code>+</code> (addition), <code>×</code> (multiplication), <code><</code> (less-than), <code>></code> (greater-than) and <code>=</code> (equals) हैं।


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


नियंत्रण प्रवाह संरचनाओं में बाउंडेड लूप्स, कंडीशनल स्टेटमेंट्स, <code>ABORT</code>लूप्स से बाहर कूदता है, और <code>QUIT</code> ब्लॉक से बाहर कूदता है। ब्लूपी रिकर्सन, अप्रतिबंधित जम्प्स या ऐसी किसी भी चीज़ की अनुमति नहीं देता है जिसका प्रभाव फ़्लूपी के अनबाउंड लूप के समान हो। नामित प्रक्रियाओं को परिभाषित किया जा सकता है, किंतु इन्हें केवल पहले से परिभाषित प्रक्रियाओं को ही कहा जा सकता है।<ref>Hofstadter (1979), p. 413.</ref>
नियंत्रण प्रवाह संरचनाओं में बाउंडेड लूप्स, कंडीशनल स्टेटमेंट्स, <code>ABORT</code>लूप्स से बाहर कूदता है, और <code>QUIT</code> ब्लॉक से बाहर कूदता है। ब्लूपी रिकर्सन, अप्रतिबंधित जम्प्स या ऐसी किसी भी चीज़ की अनुमति नहीं देता है जिसका प्रभाव फ़्लूपी के अनबाउंड लूप के समान हो। नामित प्रक्रियाओं को परिभाषित किया जा सकता है, किंतु इन्हें केवल पहले से परिभाषित प्रक्रियाओं को ही कहा जा सकता है।<ref>Hofstadter (1979), p. 413.</ref>
=== फैक्टोरियल फ़ंक्शन ===
=== फैक्टोरियल फ़ंक्शन ===
{{pre|
{{pre|
Line 29: Line 23:
}}
}}


=== सबट्रैक्सन फ़ंक्शन ===
=== सबट्रैक्सन फ़ंक्शन ===
यह एक अंतर्निहित ऑपरेशन नहीं है और (प्राकृतिक संख्याओं पर परिभाषित होने के कारण) कभी भी ऋणात्मक परिणाम नहीं देता है (जैसे 2 − 3 := 0)। ध्यान दें कि आउटपुट सभी <code>CELL</code>s,की तरह 0 से प्रारंभ   होता है, और इसलिए किसी आरंभीकरण की आवश्यकता नहीं होती है।
यह एक अंतर्निहित ऑपरेशन नहीं है और (प्राकृतिक संख्याओं पर परिभाषित होने के कारण) कभी भी ऋणात्मक परिणाम नहीं देता है (जैसे 2 − 3 := 0)। ध्यान दें कि आउटपुट सभी <code>CELL</code>s,की तरह 0 से प्रारंभ होता है, और इसलिए किसी आरंभीकरण की आवश्यकता नहीं होती है।


{{pre|1=
{{pre|1=
Line 48: Line 42:
==FlooP उदाहरण==
==FlooP उदाहरण==


नीचे दिया गया उदाहरण, जो एकरमैन फ़ंक्शन को कार्यान्वित करता है, गोडेल नंबरिंग का उपयोग करके एक स्टैक अनुकरण पर निर्भर करता है: यानी, पहले से परिभाषित संख्यात्मक फ़ंक्शंस <code>PUSH</code>, <code>POP</code>, and <code>TOP</code>को संतुष्ट करने वाले <code>PUSH [N, S] > 0</code>, <code>TOP [PUSH [N, S]] = N</code>, and <code>POP [PUSH [N, S]] = S</code> चूंकि एक अनबाउंड <code>MU-LOOP</code> का उपयोग किया जाता है, यह एक नियमित ब्लूपी प्रोग्राम नहीं है। इस स्थिति में <code>QUIT BLOCK</code> निर्देश ब्लॉक के अंत तक जाते हैं और लूप को दोहराते हैं, <code>ABORT</code>के विपरीत, जो लूप से बाहर निकलता है।<ref name="Hofstadter424"/>
नीचे दिया गया उदाहरण, जो एकरमैन फ़ंक्शन को कार्यान्वित करता है, गोडेल नंबरिंग का उपयोग करके एक स्टैक अनुकरण पर निर्भर करता है: यानी, पहले से परिभाषित संख्यात्मक फ़ंक्शंस <code>PUSH</code>, <code>POP</code>, and <code>TOP</code>को संतुष्ट करने वाले <code>PUSH [N, S] > 0</code>, <code>TOP [PUSH [N, S]] = N</code>, and <code>POP [PUSH [N, S]] = S</code> चूंकि अनबाउंड <code>MU-LOOP</code> का उपयोग किया जाता है, यह नियमित ब्लूपी प्रोग्राम नहीं है। इस स्थिति में <code>QUIT BLOCK</code> निर्देश ब्लॉक के अंत तक जाते हैं और लूप को दोहराते हैं, <code>ABORT</code>के विपरीत, जो लूप से बाहर निकलता है।


{{pre|1=
{{pre|1=
Line 92: Line 86:
*[https://code.google.com/p/bloop A compiler for BlooP and FlooP]
*[https://code.google.com/p/bloop A compiler for BlooP and FlooP]
{{Douglas Hofstadter}}
{{Douglas Hofstadter}}
[[Category: शैक्षिक प्रोग्रामिंग भाषाएँ]] [[Category: प्रायोगिक प्रोग्रामिंग भाषाएँ]]


[[Category: Machine Translated Page]]
[[Category:Collapse templates]]
[[Category:Created On 25/07/2023]]
[[Category:Created On 25/07/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with reference errors]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia metatemplates]]

Latest revision as of 16:10, 22 August 2023

BlooP और FlooP (बाउंडेड लूप और फ्री लूप) सरल प्रोग्रामिंग लैंग्वेज हैं जिन्हें डगलस हॉफ़स्टैटर ने अपनी पुस्तक गोडेल, एस्चर, बाख में एक बिंदु को चित्रित करने के लिए डिज़ाइन किया है।[1] ब्लूपी ट्यूरिंग पूर्णता या नॉन-ट्यूरिंग-पूर्ण प्रोग्रामिंग लैंग्वेज है जिसकी मुख्य नियंत्रण प्रवाह संरचना एक बाउंडेड लूप (कंप्यूटिंग) है (अथार्त रिकर्सन (कंप्यूटर विज्ञान) की अनुमति नहीं है)। लैंग्वेज के सभी प्रोग्राम समाप्त होने चाहिए, और यह लैंग्वेज केवल प्रिमिटिव रिकर्सिव फंक्शन को व्यक्त कर सकती है।[2]

फ़्लूपी ब्लूपी के समान है, अतिरिक्त इसके कि यह अनबाउंड लूप का समर्थन करता है; यह ट्यूरिंग-पूर्ण लैंग्वेज है और सभी कॉमपुटेबल फ़ंक्शन को व्यक्त कर सकती है। उदाहरण के लिए, यह एकरमैन फ़ंक्शन को व्यक्त कर सकता है, जो (प्रिमिटिव पुनरावर्ती नहीं होने के कारण) ब्लूपी में नहीं लिखा जा सकता है। गणितीय लॉजिक में मानक शब्दावली से ऋण लेता है, हॉफ़स्टैटर फ़्लूपी के अनबाउंड लूप्स को एमयू-लूप्स कहते हैं। सभी ट्यूरिंग-पूर्ण प्रोग्रामिंग लैंग्वेज ओं की तरह, फ़्लूपी हाल्टिंग की समस्या से ग्रस्त है: प्रोग्राम समाप्त नहीं हो सकते हैं, और सामान्य रूप से यह तय करना संभव नहीं है कि कौन से प्रोग्राम समाप्त होते हैं।

ब्लूपी और फ्लोपी को गणना के मॉडल के रूप में माना जा सकता है, और कभी-कभी कम्प्यूटेबिलिटी सिखाने में इसका उपयोग किया जाता है।[3]

ब्लूपी उदाहरण

एकमात्र वेरिएबल OUTPUT(प्रक्रिया का रिटर्न मान) और CELL(i) (प्राकृतिक-संख्या वेरिएबल का एक असीमित अनुक्रम, स्थिरांक द्वारा अनुक्रमित, जैसा कि असीमित रजिस्टर मशीन[4]) में है। एकमात्र ऑपरेटर (assignment), + (addition), × (multiplication), < (less-than), > (greater-than) and = (equals) हैं।

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

नियंत्रण प्रवाह संरचनाओं में बाउंडेड लूप्स, कंडीशनल स्टेटमेंट्स, ABORTलूप्स से बाहर कूदता है, और QUIT ब्लॉक से बाहर कूदता है। ब्लूपी रिकर्सन, अप्रतिबंधित जम्प्स या ऐसी किसी भी चीज़ की अनुमति नहीं देता है जिसका प्रभाव फ़्लूपी के अनबाउंड लूप के समान हो। नामित प्रक्रियाओं को परिभाषित किया जा सकता है, किंतु इन्हें केवल पहले से परिभाषित प्रक्रियाओं को ही कहा जा सकता है।[5]

फैक्टोरियल फ़ंक्शन

DEFINE PROCEDURE FACTORIAL [N]:
BLOCK 0: BEGIN
        OUTPUT ⇐ 1;
        CELL(0) ⇐ 1;
        LOOP AT MOST N TIMES:
        BLOCK 1: BEGIN
                OUTPUT ⇐ OUTPUT × CELL(0);
                CELL(0) ⇐ CELL(0) + 1;
        BLOCK 1: END;
BLOCK 0: END.

सबट्रैक्सन फ़ंक्शन

यह एक अंतर्निहित ऑपरेशन नहीं है और (प्राकृतिक संख्याओं पर परिभाषित होने के कारण) कभी भी ऋणात्मक परिणाम नहीं देता है (जैसे 2 − 3 := 0)। ध्यान दें कि आउटपुट सभी CELLs,की तरह 0 से प्रारंभ होता है, और इसलिए किसी आरंभीकरण की आवश्यकता नहीं होती है।

DEFINE PROCEDURE MINUS [M,N]:
BLOCK 0: BEGIN
        IF M < N, THEN:
        QUIT BLOCK 0;
        LOOP AT MOST M + 1 TIMES:
        BLOCK 1: BEGIN
                IF OUTPUT + N = M, THEN:
                ABORT LOOP 1;
                OUTPUT ⇐ OUTPUT + 1;
        BLOCK 1: END;
BLOCK 0: END.

FlooP उदाहरण

नीचे दिया गया उदाहरण, जो एकरमैन फ़ंक्शन को कार्यान्वित करता है, गोडेल नंबरिंग का उपयोग करके एक स्टैक अनुकरण पर निर्भर करता है: यानी, पहले से परिभाषित संख्यात्मक फ़ंक्शंस PUSH, POP, and TOPको संतुष्ट करने वाले PUSH [N, S] > 0, TOP [PUSH [N, S]] = N, and POP [PUSH [N, S]] = S चूंकि अनबाउंड MU-LOOP का उपयोग किया जाता है, यह नियमित ब्लूपी प्रोग्राम नहीं है। इस स्थिति में QUIT BLOCK निर्देश ब्लॉक के अंत तक जाते हैं और लूप को दोहराते हैं, ABORTके विपरीत, जो लूप से बाहर निकलता है।

DEFINE PROCEDURE ACKERMANN [M, N]:
BLOCK 0: BEGIN
	CELL(0) ⇐ M;
	OUTPUT ⇐ N;
	CELL(1) ⇐ 0;
	MU-LOOP:
	BLOCK 1: BEGIN
		IF CELL(0) = 0, THEN:
		BLOCK 2: BEGIN
			OUTPUT ⇐ OUTPUT + 1;
			IF CELL(1) = 0, THEN: ABORT LOOP 1;
			CELL(0) ⇐ TOP [CELL(1)];
			CELL(1) ⇐ POP [CELL(1)];
			QUIT BLOCK 1;
		BLOCK 2: END
		IF OUTPUT = 0, THEN:
		BLOCK 3: BEGIN
			OUTPUT ⇐ 1;
			CELL(0) ⇐ MINUS [CELL(0), 1];
			QUIT BLOCK 1;
		BLOCK 3: END 
		OUTPUT ⇐ MINUS [OUTPUT, 1];
		CELL(1) ⇐ PUSH [MINUS [CELL(0), 1], CELL(1)];
	BLOCK 1: END;
BLOCK 0: END.

यह भी देखें

  • मशीन जो सदैव हल्ट्स है

संदर्भ

  1. Douglas Hofstadter (1979), Gödel, Escher, Bach, Basic Books, Chapter XIII.
  2. Stanford Encyclopedia of Philosophy: Computability and Complexity
  3. David Mix Barrington (2004), CMPSCI 601: Theory of Computation, University of Massachusetts Amherst, Lecture 27.
  4. Hofstadter refers to these cells as a set of "auxiliary variables."
  5. Hofstadter (1979), p. 413.


बाहरी संबंध