बीलूप और एफलूप
BlooP और FlooP (बाउंडेड लूप और फ्री लूप) सरल
(बाउंडेड लूप और फ्री लूप हैं जिन्हें �ामिंग भाषा|प्रोग� ने अपनी पुस्तक �ज]] हैं जिन्हें [[ड� में एक बिंदु को चित्रित करने के लिए डिज़ाइन किया है। एक बिंदु को चित्रित करने के लिए डिज़ा ब्लूपी एक ��Cite error: Closing</ref>
missing for<ref>
tag[1] हॉफ़स्टैटर फ़्लूपी के अनबाउंड लूप्स को एमयू-लूप्स कहते हैं। सभी ट्यूरिंग-पूर्ण प्रोग्रामिंग लैंग्वेज ओं की तरह, फ़्लूपी हाल्टिंग की समस्या से ग्रस्त है: प्रोग्राम समाप्त नहीं हो सकते हैं, और सामान्य रूप से यह तय करना संभव नहीं है कि कौन से प्रोग्राम समाप्त होते हैं।
ब्लूपी और फ्लोपी को गणना के मॉडल के रूप में माना जा सकता है, और कभी-कभी कम्प्यूटेबिलिटी सिखाने में इसका उपयोग किया जाता है।[2]
ब्लूपी उदाहरण
एकमात्र चर OUTPUT
(प्रक्रिया का रिटर्न मान) और CELL(i)
(प्राकृतिक-संख्या चर का एक असीमित अनुक्रम, स्थिरांक द्वारा अनुक्रमित, जैसा कि असीमित रजिस्टर मशीन[3]) में है। एकमात्र ऑपरेटर ⇐
(assignment), +
(addition), ×
(multiplication), <
(less-than), >
(greater-than) and =
(equals) हैं।
प्रत्येक प्रोग्राम केवल सीमित संख्या में सेल्स का उपयोग करता है, किन्तु सेल्स में संख्या इच्छित रूप से बड़ी हो सकती है। सूचियों या स्टैक जैसी डेटा संरचनाओं को सेल में संख्या की विशिष्ट विधियों से व्याख्या करके नियंत्रित किया जा सकता है, अर्थात, अनुक्रमों के लिए गोडेल नंबरिंग द्वारा गोडेल संभावित संरचनाओं को क्रमांकित करता है।
नियंत्रण प्रवाह संरचनाओं में बाउंडेड लूप्स, कंडीशनल स्टेटमेंट्स, ABORT
लूप्स से बाहर कूदता है, और QUIT
ब्लॉक से बाहर कूदता है। ब्लूपी रिकर्सन, अप्रतिबंधित जम्प्स या ऐसी किसी भी चीज़ की अनुमति नहीं देता है जिसका प्रभाव फ़्लूपी के अनबाउंड लूप के समान हो। नामित प्रक्रियाओं को परिभाषित किया जा सकता है, किंतु इन्हें केवल पहले से परिभाषित प्रक्रियाओं को ही कहा जा सकता है।[4]
फैक्टोरियल फ़ंक्शन
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)। ध्यान दें कि आउटपुट सभी CELL
s,की तरह 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
के विपरीत, जो लूप से बाहर निकलता है।[5]
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.
यह भी देखें
- मशीन जो सदैव हल्ट्स है
संदर्भ
- ↑ Thomas Forster (2003), Logic, Induction and Sets, Cambridge University Press, p. 130.
- ↑ David Mix Barrington (2004), CMPSCI 601: Theory of Computation, University of Massachusetts Amherst, Lecture 27.
- ↑ Hofstadter refers to these cells as a set of "auxiliary variables."
- ↑ Hofstadter (1979), p. 413.
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs namedHofstadter424