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

From Vigyanwiki
(Created page with "{{Short description|Simple programming languages}} {{abbr|'''BlooP'''|Bounded loop}} और {{abbr|'''FlooP'''|Free loop}} (बाउंडेड लूप और फ्री...")
 
No edit summary
Line 1: Line 1:
{{Short description|Simple programming languages}}
{{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, Escher, Bach]]'', Basic Books, Chapter XIII.</ref> ब्लूपी एक [[ट्यूरिंग पूर्णता]] या गैर-ट्यूरिंग-पूर्ण प्रोग्रामिंग लैंग्वेज  है जिसकी मुख्य नियंत्रण प्रवाह संरचना एक बाउंडेड [[लूप (कंप्यूटिंग)]] है (अथार्त [[रिकर्सन (कंप्यूटर विज्ञान)]] की अनुमति नहीं है)। लैंग्वेज  के सभी प्रोग्राम समाप्त होने चाहिए, और यह लैंग्वेज  केवल [[आदिम पुनरावर्ती कार्य|प्रिमिटिव  रिकर्सिव फंक्शन]] को व्यक्त कर सकती है।<ref>[http://plato.stanford.edu/entries/computability/ Stanford Encyclopedia of Philosophy:  Computability and Complexity]</ref>
फ़्लूपी ब्लूपी के समान है, सिवाय इसके कि यह अनबाउंड लूप का समर्थन करता है; यह एक ट्यूरिंग-पूर्ण भाषा है और सभी [[गणना योग्य कार्य]]ों को व्यक्त कर सकती है। उदाहरण के लिए, यह [[एकरमैन फ़ंक्शन]] को व्यक्त कर सकता है, जो (आदिम पुनरावर्ती नहीं होने के कारण) ब्लूपी में नहीं लिखा जा सकता है। [[गणितीय तर्क]] में मानक शब्दावली से उधार लेना,<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 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>
ब्लूपी और फ्लोपी को गणना के मॉडल के रूप में माना जा सकता है, और कभी-कभी कम्प्यूटेबिलिटी सिखाने में इसका उपयोग किया जाता है।<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>
Line 8: Line 9:
==ब्लूपी उदाहरण==
==ब्लूपी उदाहरण==


एकमात्र [[ चर (प्रोग्रामिंग) ]] हैं <code>OUTPUT</code> (प्रक्रिया का वापसी मूल्य) और <code>CELL(''i'')</code> (प्राकृतिक-संख्या चर का एक असीमित अनुक्रम, स्थिरांक द्वारा अनुक्रमित, जैसा कि काउंटर मशीन मॉडल#1963 में: शेफर्डसन और स्टर्गिस मॉडल<ref>Hofstadter refers to these cells as a set of "auxiliary variables."</ref>). एकमात्र [[ऑपरेटर (प्रोग्रामिंग)]] हैं <code>⇐</code> ([[असाइनमेंट (कंप्यूटर विज्ञान)]]), <code>+</code> (जोड़ना), <code>×</code> (गुणा), <code>&lt;</code> (से कम), <code>&gt;</code> (इससे भी बड़ा) और <code>=</code> (बराबर).
एकमात्र चर <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|
DEFINE PROCEDURE ''FACTORIAL'' [N]:
DEFINE PROCEDURE ''FACTORIAL'' [N]:
Line 29: Line 28:
}}
}}


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


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


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


{{pre|1=
{{pre|1=
Line 79: Line 78:


==यह भी देखें==
==यह भी देखें==
* मशीन जो हमेशा रुकती है
* मशीन जो सदैव हल्ट्स है


==संदर्भ==
==संदर्भ==

Revision as of 09:18, 2 August 2023

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

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

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


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

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

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

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

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

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के विपरीत, जो लूप से बाहर निकलता है।[3]

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. 3.0 3.1 Hofstadter (1979), p. 424.
  4. Thomas Forster (2003), Logic, Induction and Sets, Cambridge University Press, p. 130.
  5. David Mix Barrington (2004), CMPSCI 601: Theory of Computation, University of Massachusetts Amherst, Lecture 27.
  6. Hofstadter refers to these cells as a set of "auxiliary variables."
  7. Hofstadter (1979), p. 413.


बाहरी संबंध