बीलूप और एफलूप

From Vigyanwiki

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

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.
  6. Cite error: Invalid <ref> tag; no text was provided for refs named Hofstadter424


बाहरी संबंध