फ्रैक्ट्रान: Difference between revisions
No edit summary |
No edit summary |
||
(9 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{short description|Turing-complete esoteric programming language invented by John Conway}} | {{short description|Turing-complete esoteric programming language invented by John Conway}} | ||
फ्रैक्ट्रान [[ट्यूरिंग-पूर्ण]] [[गूढ़ प्रोग्रामिंग भाषा]] है, जिसका आविष्कार गणितज्ञ [[जॉन हॉर्टन कॉनवे]] ने किया था। फ्रैक्ट्रान | फ्रैक्ट्रान [[ट्यूरिंग-पूर्ण]] [[गूढ़ प्रोग्रामिंग भाषा]] है, जिसका आविष्कार गणितज्ञ [[जॉन हॉर्टन कॉनवे]] ने किया था। फ्रैक्ट्रान प्रोग्राम सकारात्मक [[अंश (गणित)|भिन्न (गणित)]] का प्रारंभिक पूर्णांक निविष्ट ''N'' के साथ [[अनुक्रम]] है। प्रोग्राम निम्नानुसार पूर्णांक 'N' को अद्यतन करके चलाया जाता है। | ||
# पहले | # पहले भिन्न ''F'' के लिए सूची में जिसके लिए ''NF'' पूर्णांक है, ''N'' को NF से बदलें। | ||
#इस नियम को तब तक | #इस नियम को तब तक करते रहे, जब तक कि सूची में कोई भी भिन्न N से गुणा करने पर पूर्णांक नहीं बनाता, फिर रुक जाता है। | ||
{{harvnb| | {{harvnb|कोनवे|1987}} निम्नलिखित फ्रैक्ट्रान प्रोग्राम देता है, जिसे प्राइमगेम कहा जाता है, जो क्रमिक [[अभाज्य संख्या|अभाज्य संख्याएँ]] पाता है। | ||
<math display="block">\left( \frac{17}{91}, \frac{78}{85}, \frac{19}{51}, \frac{23}{38}, \frac{29}{33}, \frac{77}{29}, \frac{95}{23}, \frac{77}{19}, \frac{1}{17}, \frac{11}{13}, \frac{13}{11}, \frac{15}{2}, \frac{1}{7}, \frac{55}{1} \right)</math> | <math display="block">\left( \frac{17}{91}, \frac{78}{85}, \frac{19}{51}, \frac{23}{38}, \frac{29}{33}, \frac{77}{29}, \frac{95}{23}, \frac{77}{19}, \frac{1}{17}, \frac{11}{13}, \frac{13}{11}, \frac{15}{2}, \frac{1}{7}, \frac{55}{1} \right)</math> | ||
N=2 से | N=2 से प्रारंभ होकर, यह फ्रैक्ट्रान प्रोग्राम पूर्णांकों के निम्नलिखित अनुक्रम उत्पन्न करता है। | ||
* 2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, ... | * 2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, . . . | ||
2 के बाद, इस क्रम में 2 की निम्नलिखित | 2 के बाद, इस क्रम में 2 की निम्नलिखित घातांक हैं। | ||
<math display="block">2^2=4,\, 2^3=8,\, 2^5=32,\, 2^7=128,\, 2^{11}=2048,\, 2^{13}=8192,\, 2^{17}=131072,\, 2^{19}=524288,\, \dots</math> | <math display="block">2^2=4,\, 2^3=8,\, 2^5=32,\, 2^7=128,\, 2^{11}=2048,\, 2^{13}=8192,\, 2^{17}=131072,\, 2^{19}=524288,\, \dots</math>जो 2 की प्रधान घातांक हैं। | ||
जो 2 की प्रधान | |||
== फ्रैक्ट्रान | == फ्रैक्ट्रान प्रोग्राम को समझना == | ||
फ्रैक्ट्रान प्रोग्राम को प्रकार की [[रजिस्टर मशीन]] के रूप में देखा जा सकता है जहाँ रजिस्टरों को तर्क n में | फ्रैक्ट्रान प्रोग्राम को प्रकार की [[रजिस्टर मशीन]] के रूप में देखा जा सकता है, जहाँ रजिस्टरों को तर्क n में प्रमुख घातांक में संग्रहीत किया जाता है। | ||
गोडेल | गोडेल संख्या का उपयोग करते हुए, सकारात्मक पूर्णांक n स्वेच्छया से बड़े सकारात्मक पूर्णांक चर की स्वेच्छा संख्या को सांकेतिक शब्दों में बदल सकता है।<ref group=note>[[Gödel numbering]] cannot be directly used for negative integers, floating point numbers or text strings, although conventions could be adopted to represent these data types indirectly. Proposed extensions to FRACTRAN include [http://www.esolangs.org/wiki/Fractran_plus_plus FRACTRAN++] and [http://home.nvg.org/~oerjan/esoteric/bag/ Bag].</ref> प्रत्येक चर का मान पूर्णांक के पूर्णांक गुणनखंड में अभाज्य संख्या के घातांक के रूप में सांकेतिक किया गया है। उदाहरण के लिए, पूर्णांक | ||
<math display="block">60 = 2^2 \times 3^1 \times 5^1</math> | <math display="block">60 = 2^2 \times 3^1 \times 5^1</math> | ||
रजिस्टर स्थिति का प्रतिनिधित्व करता है | रजिस्टर स्थिति का प्रतिनिधित्व करता है,चर जिसे हम v2 कहेंगे जिसका मान 2 है और दो अन्य चर (v3 और v5) का मान 1 है। अन्य सभी चर का मान 0 है। | ||
फ्रैक्ट्रान | फ्रैक्ट्रान प्रोग्राम सकारात्मक भिन्नों की क्रमबद्ध सूची है। प्रत्येक भिन्न निर्देश का प्रतिनिधित्व करता है जो अधिक चर का परीक्षण करता है। जो इसके [[भाजक]] के प्रमुख कारकों द्वारा दर्शाया जाता है। उदाहरण के लिए, | ||
<math display="block">f_1 = \frac{21}{20} = \frac{3 \times 7}{2^2 \times 5^1}</math> | <math display="block">f_1 = \frac{21}{20} = \frac{3 \times 7}{2^2 \times 5^1}</math> | ||
परीक्षण v2 और v5। यदि <math>v_2 \ge 2</math> और <math>v_5 \ge 1</math>, फिर यह v2 से 2 और v5 से 1 घटाता है और 1 को v3 और 1 को v7 में जोड़ता है। उदाहरण के | परीक्षण v2 और v5। यदि <math>v_2 \ge 2</math> और <math>v_5 \ge 1</math>, फिर यह v2 से 2 और v5 से 1 घटाता है और 1 को v3 और 1 को v7 में जोड़ता है। उदाहरण के लिए, | ||
<math display="block">60 \cdot f_1 = 2^2 \times 3^1 \times 5^1 \cdot \frac{3 \times 7}{2^2 \times 5^1} = 3^2 \times 7^1</math> | <math display="block">60 \cdot f_1 = 2^2 \times 3^1 \times 5^1 \cdot \frac{3 \times 7}{2^2 \times 5^1} = 3^2 \times 7^1</math> | ||
चूँकि फ्रैक्ट्रान प्रोग्राम केवल भिन्नों की सूची | चूँकि, फ्रैक्ट्रान प्रोग्राम केवल भिन्नों की सूची है। ये परीक्षण-कमी-वृद्धि निर्देश फ्रैक्ट्रान भाषा में केवल अनुमत निर्देश हैं। इसके अतिरिक्त निम्नलिखित प्रतिबंध लागू होते हैं। | ||
* हर बार निर्देश निष्पादित किया जाता है, परीक्षण किए गए चर भी कम हो जाते हैं। | * हर बार निर्देश निष्पादित किया जाता है, परीक्षण किए गए चर भी कम हो जाते हैं। | ||
* | * चर को निर्देश में घटाया और बढ़ाया नहीं जा सकता हैं। अन्यथा उस निर्देश का प्रतिनिधित्व करने वाला भिन्न अपने निम्नतम शब्दों में नहीं होगा। इसलिए प्रत्येक फ्रैक्ट्रान निर्देश चर का उपभोग करता है क्योंकि यह उनका परीक्षण करता है। | ||
* यदि चर 0 है तो फ्रैक्ट्रान निर्देश के लिए सीधे परीक्षण करना संभव नहीं | * यदि चर 0 है, तो फ्रैक्ट्रान निर्देश के लिए सीधे परीक्षण करना संभव नहीं है। चूंकि, अप्रत्यक्ष परीक्षण को व्यतिक्रम निर्देश बनाकर लागू किया जा सकता है जो किसी विशेष चर का परीक्षण करने वाले अन्य निर्देशों के बाद रखा जाता है। | ||
== सरल प्रोग्राम बनाना == | == सरल प्रोग्राम बनाना == | ||
=== जोड़ === | === जोड़ === | ||
सबसे सरल फ्रैक्ट्रान प्रोग्राम | सबसे सरल फ्रैक्ट्रान प्रोग्राम एकल निर्देश है जैसे | ||
<math display="block">\left( \frac{3}{2} \right)</math> | <math display="block">\left( \frac{3}{2} \right)</math> | ||
इस | इस प्रोग्राम को निम्नानुसार बहुत सरल कलन विधि के रूप में दर्शाया जा सकता है। | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! फ्रैक्ट्रान<br> | ! फ्रैक्ट्रान<br>निर्देश | ||
! | ! परिस्थिति | ||
! | ! क्रिया | ||
|- | |- | ||
| align="center" | <math>\frac{3}{2}</math> | | align="center" | <math>\frac{3}{2}</math> | ||
| v2 > 0 | | v2 > 0 | ||
| | | v2 में से 1 घटाएं | ||
v3 में 1 जोड़ें | |||
|- | |- | ||
| | | | ||
| v2 = 0 | | v2 = 0 | ||
| | | रुकना | ||
|} | |} | ||
प्रपत्र के प्रारंभिक | प्रपत्र के प्रारंभिक निविष्ट को देखते हुए <math>2^a 3^b</math>, यह प्रोग्राम अनुक्रम की गणना करेगा <math>2^{a-1} 3^{b+1}</math>, <math>2^{a-2} 3^{b+2}</math>, आदि, अंततः, के बाद तक <math>a</math> चरण, 2 का कोई कारक नहीं रहता है और उत्पाद के साथ <math>\frac{3}{2}</math> अब कोई पूर्णांक नहीं देता है। मशीन तब के अंतिम आउटपुट के साथ बंद हो जाती है <math> 3^{a + b} </math>. इसलिए यह दो पूर्णांकों को साथ जोड़ता है। | ||
=== गुणा === | === गुणा === | ||
हम योजक के माध्यम से लूप करके गुणक बना सकते हैं। ऐसा करने के लिए हमें अपने | हम योजक के माध्यम से लूप करके गुणक बना सकते हैं। ऐसा करने के लिए हमें अपने कलन विधि में स्थिति [[राज्य (कंप्यूटर विज्ञान)|(कंप्यूटर विज्ञान)]] प्रस्तुत करने की आवश्यकता है। यह कलन विधि संख्या लेगा <math>2^a 3^b</math> और उत्पादन <math>5^{ab}</math> है। | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! वर्तमान स्थिति | ||
! | ! परिस्थिति | ||
! | ! क्रिया | ||
! | ! आगे की स्थिति | ||
|- | |- | ||
| rowspan="4" align="center" | A | | rowspan="4" align="center" | A | ||
| v7 > 0 | | v7 > 0 | ||
| | | v7 में से 1 घटाएं | ||
v3 में 1 जोड़ें | |||
| align="center" | A | | align="center" | A | ||
|- | |- | ||
| v7 = 0 and<br>v2 > 0 | | v7 = 0 and<br>v2 > 0 | ||
| | | v2 में से 1 घटाएं | ||
| align="center" | B | | align="center" | B | ||
|- | |- | ||
| v7 = 0 and<br>v2 = 0 and<br>v3 > 0 | | v7 = 0 and<br>v2 = 0 and<br>v3 > 0 | ||
| | | v3 में से 1 घटाएं | ||
| align="center" | A | | align="center" | A | ||
|- | |- | ||
| v7 = 0 and<br>v2 = 0 and<br>v3 = 0 | | v7 = 0 and<br>v2 = 0 and<br>v3 = 0 | ||
| | | रुकना | ||
| | | | ||
|- | |- | ||
| rowspan="2" align="center" | B | | rowspan="2" align="center" | B | ||
| v3 > 0 | | v3 > 0 | ||
| | | v3 में से 1 घटाएं | ||
v5 में 1 जोड़ें | |||
v7 में 1 जोड़ें | |||
| align="center" | B | | align="center" | B | ||
|- | |- | ||
| v3 = 0 | | v3 = 0 | ||
| | | कोई नहीं | ||
| align="center" | A | | align="center" | A | ||
|} | |} | ||
स्थिति B लूप है जो v3 को v5 में जोड़ता है और v3 को v7 में भी ले जाता है, और स्थिति A बाहरी नियंत्रण लूप है जो लूप को स्थिति B v2 बार दोहराता है। स्थिति B में लूप पूरा होने के बाद स्थिति A भी v7 से v3 के मान को पुनर्स्थापित करता है। | |||
हम | हम स्थिति संकेतकों के रूप में नए चरों का उपयोग करके स्थितियों को लागू कर सकते हैं। स्थिति B के लिए स्थिति संकेतक v11 और v13 होंगे। ध्यान दें कि हमें लूप के लिए दो स्थिति नियंत्रण संकेतकों की आवश्यकता होती है। प्राथमिक ध्वज (v11) और द्वितीयक ध्वज (v13)। क्योंकि जब भी परीक्षण किया जाता है, तो प्रत्येक संकेतक का उपभोग किया जाता है। हमें वर्तमान स्थिति में जारी रखने के लिए द्वितीयक संकेतक की आवश्यकता होती है। इस द्वितीयक संकेतक को अगले निर्देश में प्राथमिक संकेतक पर वापस बदलना किया जाता है और लूप जारी रहता है। | ||
गुणन | गुणन कलन विधि तालिका में फ्रैक्ट्रान स्थिति संकेतक और निर्देश जोड़ना, हमारे पास है। | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! फ्रैक्ट्रान<br> | ! फ्रैक्ट्रान<br>निर्देश | ||
! | ! वर्तमान स्थिति | ||
! | ! राज्य | ||
! | संकेतक | ||
! | ! परिस्थिति | ||
! | ! क्रिया | ||
! आगे की स्थिति | |||
|- | |- | ||
| align="center" | <math>\frac{3}{7}</math> | | align="center" | <math>\frac{3}{7}</math> | ||
| rowspan="4" align="center" | A | | rowspan="4" align="center" | A | ||
| rowspan="4" | | | rowspan="4" | कोई नहीं | ||
| v7 > 0 | | v7 > 0 | ||
| | | v7 में से 1 घटाएं | ||
v3 में 1 जोड़ें | |||
| align="center" | A | | align="center" | A | ||
|- | |- | ||
| align="center" | <math>\frac{11}{2}</math> | | align="center" | <math>\frac{11}{2}</math> | ||
| v7 = 0 and<br>v2 > 0 | | v7 = 0 and<br>v2 > 0 | ||
| | | स्थितियोंv2 में से 1 घटाएं | ||
| align="center" | B | | align="center" | B | ||
|- | |- | ||
| align="center" | <math>\frac{1}{3}</math> | | align="center" | <math>\frac{1}{3}</math> | ||
| v7 = 0 and<br>v2 = 0 and<br>v3 > 0 | | v7 = 0 and<br>v2 = 0 and<br>v3 > 0 | ||
| | | v3 में से 1 घटाएं | ||
| align="center" | A | | align="center" | A | ||
|- | |- | ||
| | | | ||
| v7 = 0 and<br>v2 = 0 and<br>v3 = 0 | | v7 = 0 and<br>v2 = 0 and<br>v3 = 0 | ||
| | | रुकना | ||
| | | | ||
|- | |- | ||
Line 136: | Line 142: | ||
| rowspan="2" | v11, v13 | | rowspan="2" | v11, v13 | ||
| v3 > 0 | | v3 > 0 | ||
| | | v3 में से 1 घटाएं | ||
v5 में 1 जोड़ें | |||
v7 में 1 जोड़ें | |||
| align="center" | B | | align="center" | B | ||
|- | |- | ||
| align="center" | <math>\frac{1}{11}</math> | | align="center" | <math>\frac{1}{11}</math> | ||
| v3 = 0 | | v3 = 0 | ||
| | | कोई नहीं | ||
| align="center" | A | | align="center" | A | ||
|} | |} | ||
जब हम फ्रैक्ट्रान निर्देश लिखते हैं, तो हमें | जब हम फ्रैक्ट्रान निर्देश लिखते हैं, तो हमें स्थिति A निर्देश को अंतिम में रखना चाहिए, क्योंकि स्थिति A में कोई स्थिति संकेतक नहीं है यदि कोई स्थिति संकेतक स्थिर नहीं है तो यह व्यतिक्रम स्थिति है। जिससे फ्रैक्ट्रान प्रोग्राम के रूप में गुणक बन जाता है। | ||
<math display="block">\left( \frac{455}{33}, \frac{11}{13}, \frac{1}{11}, \frac{3}{7}, \frac{11}{2}, \frac{1}{3} \right)</math> | <math display="block">\left( \frac{455}{33}, \frac{11}{13}, \frac{1}{11}, \frac{3}{7}, \frac{11}{2}, \frac{1}{3} \right)</math> | ||
निविष्ट के साथ 2<sup>a</sup>3<sup>b</sup> यह प्रोग्राम आउटपुट 5<sup>''ab''</sup> उत्पन्न करता है<sup>. <ref group="note">A similar multiplier algorithm is described at the [http://www.esolangs.org/wiki/Fractran Esolang FRACTRAN page].</ref> | |||
[[File:FRACTRANmult0.gif|thumb|544px|center|उपरोक्त फ्रैक्ट्रान | [[File:FRACTRANmult0.gif|thumb|544px|center|उपरोक्त फ्रैक्ट्रान प्रोग्राम, 3 गुना 2 की गणना (जिससे कि इसका निविष्ट है <math>2^3\times 3^2=72</math> और इसका आउटपुट होना चाहिए <math>5^6</math> क्योंकि 3 गुना 2 बराबर 6.]] | ||
=== घटाव और भाग === | === घटाव और भाग === | ||
इसी | इसी प्रकार, हम फ्रैक्ट्रान घटाव बना सकते हैं और बार-बार घटाव हमें भागफल और शेष कलन विधि बनाने की अनुमति देता है। | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! फ्रैक्ट्रान<br> | ! फ्रैक्ट्रान<br>निर्देश | ||
! | ! वर्तमान स्थिति | ||
! | ! स्थिति संकेतक | ||
! | ! परिस्थिति | ||
! | ! क्रिया | ||
! | ! आगे की स्थिति | ||
|- | |- | ||
| align="center" | <math>\frac{7 \cdot 13}{2 \cdot 3 \cdot 11}, \frac{11}{13}</math> | | align="center" | <math>\frac{7 \cdot 13}{2 \cdot 3 \cdot 11}, \frac{11}{13}</math> | ||
Line 167: | Line 176: | ||
| rowspan="3" | v11, v13 | | rowspan="3" | v11, v13 | ||
| v2 > 0 and<br>v3 > 0 | | v2 > 0 and<br>v3 > 0 | ||
| | | v2 में से 1 घटाएं | ||
v3 में से 1 घटाएं | |||
v7 में 1 जोड़ें | |||
| align="center" | A | | align="center" | A | ||
|- | |- | ||
| align="center" | <math>\frac{1}{3 \cdot 11}</math> | | align="center" | <math>\frac{1}{3 \cdot 11}</math> | ||
| v2 = 0 and<br>v3 > 0 | | v2 = 0 and<br>v3 > 0 | ||
| | | v3 में से 1 घटाएं | ||
| align="center" | X | | align="center" | X | ||
|- | |- | ||
| align="center" | <math>\frac{5 \cdot 17}{11}</math> | | align="center" | <math>\frac{5 \cdot 17}{11}</math> | ||
| v3 = 0 | | v3 = 0 | ||
| | | v5 में 1 जोड़ें | ||
| align="center" | B | | align="center" | B | ||
|- | |- | ||
Line 184: | Line 196: | ||
| rowspan="2" | v17, v19 | | rowspan="2" | v17, v19 | ||
| v7 > 0 | | v7 > 0 | ||
| | | v7 में से 1 घटाएं | ||
v3 में 1 जोड़ें | |||
| align="center" | B | | align="center" | B | ||
|- | |- | ||
| align="center" | <math>\frac{11}{17}</math> | | align="center" | <math>\frac{11}{17}</math> | ||
| v7 = 0 | | v7 = 0 | ||
| | | कोई नहीं | ||
| align="center" | A | | align="center" | A | ||
|- | |- | ||
Line 196: | Line 209: | ||
| rowspan="2" | | | rowspan="2" | | ||
| v3 > 0 | | v3 > 0 | ||
| | | v3 में से 1 घटाएं | ||
| align="center" | X | | align="center" | X | ||
|- | |- | ||
| | | | ||
| v3 = 0 | | v3 = 0 | ||
| | | रुकना | ||
| | | | ||
|} | |} | ||
Line 207: | Line 220: | ||
<math display="block">\left( \frac{91}{66}, \frac{11}{13}, \frac{1}{33}, \frac{85}{11}, \frac{57}{119}, \frac{17}{19}, \frac{11}{17}, \frac{1}{3} \right)</math> | <math display="block">\left( \frac{91}{66}, \frac{11}{13}, \frac{1}{33}, \frac{85}{11}, \frac{57}{119}, \frac{17}{19}, \frac{11}{17}, \frac{1}{3} \right)</math> | ||
और | और निविष्ट 2<sup>n</sup>3<sup>d</sup>11 आउटपुट 5<sup>''q''</sup>7<sup>''r''</sup> उत्पन्न करता है, जहां n = qd + r और 0 ≤ r < d। | ||
== कॉनवे का प्रमुख | == कॉनवे का प्रमुख कलन विधि == | ||
उपरोक्त कॉनवे का | उपरोक्त कॉनवे का प्रमुख उत्पादन कलन विधि अनिवार्य रूप से दो लूप के भीतर भागफल और शेष कलन विधि है। प्रपत्र का निविष्ट दिया गया <math>2^n 7^m</math> जहाँ 0 ≤ m < n, कलन विधि n+1 को प्रत्येक संख्या से n से 1 तक विभाजित करने का प्रयास करता है। जब तक कि यह सबसे बड़ी संख्या k नहीं पाता ,जो n+1 का भाजक है। यह फिर 2 लौटाता है 2<sup>''n''+1</sup> 7<sup>''k''-1</sup> दोहराता है। कलन विधि द्वारा उत्पन्न स्थिति संख्याओं का अनुक्रम केवल 2 की घात उत्पन्न करता है जब K 1 होता है जिससे कि 7 का घातांक 0 हो, जो केवल तब होता है जब 2 का घातांक अभाज्य होता है। हैविल (2007) में कॉनवे के कलन विधि की चरण-दर-चरण व्याख्या पाई जा सकती है। | ||
इस प्रोग्राम के लिए अभाज्य संख्या 2, 3, 5, 7... तक पहुँचने के लिए क्रमशः 19, 69, 281, 710,... चरणों की आवश्यकता | इस प्रोग्राम के लिए अभाज्य संख्या 2, 3, 5, 7... तक पहुँचने के लिए क्रमशः 19, 69, 281, 710,... चरणों की आवश्यकता है। | ||
कॉनवे के | कॉनवे के प्रोग्राम का प्रकार भी उपस्थित है,<ref>{{harvnb|Guy|1983|p=26}}; {{harvnb|Conway|1996|p=147}}</ref> जो उपरोक्त संस्करण से दो भिन्नों से भिन्न है। | ||
<math display="block">\left( \frac{17}{91}, \frac{78}{85}, \frac{19}{51}, \frac{23}{38}, \frac{29}{33}, \frac{77}{29}, \frac{95}{23}, \frac{77}{19}, \frac{1}{17}, \frac{11}{13}, \frac{13}{11}, \frac{15}{14}, \frac{15}{2}, \frac{55}{1} \right)</math> | <math display="block">\left( \frac{17}{91}, \frac{78}{85}, \frac{19}{51}, \frac{23}{38}, \frac{29}{33}, \frac{77}{29}, \frac{95}{23}, \frac{77}{19}, \frac{1}{17}, \frac{11}{13}, \frac{13}{11}, \frac{15}{14}, \frac{15}{2}, \frac{55}{1} \right)</math> | ||
यह संस्करण थोड़ा तेज़ है। 2, 3, 5, 7... तक पहुँचने में इसे 19, 69, 280, 707... कदम लगते | यह संस्करण थोड़ा तेज़ है। 2, 3, 5, 7... तक पहुँचने में इसे 19, 69, 280, 707... कदम लगते हैं। इस प्रोग्राम का एकल पुनरावृत्ति, प्रधानता के लिए विशेष संख्या N की जाँच करते हुए, निम्नलिखित चरणों की संख्या लेता है। | ||
<math display="block">N - 1 + (6N+2)(N-b) + 2 \sum\limits^{N-1}_{d=b} \left\lfloor \frac{N}{d} \right\rfloor,</math> | <math display="block">N - 1 + (6N+2)(N-b) + 2 \sum\limits^{N-1}_{d=b} \left\lfloor \frac{N}{d} \right\rfloor,</math> | ||
जहाँ <math>b < N</math>, N का सबसे बड़ा पूर्णांक विभाजक है <math>\lfloor x \rfloor</math> [[फर्श समारोह|फ्लोर फंक्शन]] है।<ref>{{harvnb|Guy|1983|p=33}}</ref>1999 में, डेविन किल्मिंस्टर ने छोटे दस-निर्देश प्रोग्राम का प्रदर्शन किया।<ref>{{harvnb|Havil|2007|p=176}}</ref> | |||
1999 में, डेविन किल्मिंस्टर ने छोटे | |||
<math display="block">\left( \frac{7}{3}, \frac{99}{98}, \frac{13}{49}, \frac{39}{35}, \frac{36}{91}, \frac{10}{143}, \frac{49}{13}, \frac{7}{11}, \frac{1}{2}, \frac{91}{1} \right).</math> | <math display="block">\left( \frac{7}{3}, \frac{99}{98}, \frac{13}{49}, \frac{39}{35}, \frac{36}{91}, \frac{10}{143}, \frac{49}{13}, \frac{7}{11}, \frac{1}{2}, \frac{91}{1} \right).</math> | ||
प्रारंभिक | प्रारंभिक निविष्ट n = 10 के लिए 10 की बाद की घातयों द्वारा क्रमिक अभाज्य उत्पन्न होते हैं। | ||
== अन्य उदाहरण == | == अन्य उदाहरण == | ||
निम्नलिखित फ्रैक्ट्रान | निम्नलिखित फ्रैक्ट्रान प्रोग्राम। | ||
<math display="block">\left( \frac{3 \cdot 11}{2^2 \cdot 5} , \frac{5}{11}, \frac{13}{2 \cdot 5}, \frac{1}{5}, \frac{2}{3}, \frac{2 \cdot 5}{7}, \frac{7}{2} \right)</math> | <math display="block">\left( \frac{3 \cdot 11}{2^2 \cdot 5} , \frac{5}{11}, \frac{13}{2 \cdot 5}, \frac{1}{5}, \frac{2}{3}, \frac{2 \cdot 5}{7}, \frac{7}{2} \right)</math> | ||
A के द्विचर विस्तार के [[हैमिंग वजन]] H (A) की गणना करता है अर्थात Aके द्विचर विस्तार में 1 की संख्या।<ref>John Baez, [http://golem.ph.utexas.edu/category/2006/10/puzzle_4.html Puzzle #4], The ''n''-Category Café</ref> दिया गया निविष्ट 2<sup>a</sup>, इसका आउटपुट 13<sup>H(''a'')</sup> है। प्रोग्राम का विश्लेषण इस प्रकार किया जा सकता है। | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! फ्रैक्ट्रान<br> | ! फ्रैक्ट्रान<br>निर्देश | ||
! | ! वर्तमान स्थिति | ||
! | ! स्थिति संकेतक | ||
! | ! परिस्थिति | ||
! | ! क्रिया | ||
! | ! आगे की स्थिति | ||
|- | |- | ||
| align="center" | <math>\frac{3 \cdot 11}{2^2 \cdot 5}, \frac{5}{11}</math> | | align="center" | <math>\frac{3 \cdot 11}{2^2 \cdot 5}, \frac{5}{11}</math> | ||
Line 244: | Line 256: | ||
| rowspan="3" | v5, v11 | | rowspan="3" | v5, v11 | ||
| v2 > 1 | | v2 > 1 | ||
| | | v2 में से 2 घटाएं | ||
v3 में 1 जोड़ें | |||
| align="center" | A | | align="center" | A | ||
|- | |- | ||
| align="center" | <math>\frac{13}{2 \cdot 5}</math> | | align="center" | <math>\frac{13}{2 \cdot 5}</math> | ||
| v2 = 1 | | v2 = 1 | ||
| | | v2 में से 1 घटाएं | ||
v13 में 1 जोड़ें | |||
| align="center" | B | | align="center" | B | ||
|- | |- | ||
| align="center" | <math>\frac{1}{5}</math> | | align="center" | <math>\frac{1}{5}</math> | ||
| v2 = 0 | | v2 = 0 | ||
| | | कोई नहीं | ||
| align="center" | B | | align="center" | B | ||
|- | |- | ||
| align="center" | <math>\frac{2}{3}</math> | | align="center" | <math>\frac{2}{3}</math> | ||
| rowspan="4" align="center" | B | | rowspan="4" align="center" | B | ||
| rowspan="4" | | | rowspan="4" | कोई नहीं | ||
| v3 > 0 | | v3 > 0 | ||
| | | v3 में से 1 घटाएं | ||
v2 में 1 जोड़ें | |||
| align="center" | B | | align="center" | B | ||
|- | |- | ||
| align="center" | <math>\frac{2 \cdot 5}{7}</math> | | align="center" | <math>\frac{2 \cdot 5}{7}</math> | ||
| v3 = 0 and<br>v7 > 0 | | v3 = 0 and<br>v7 > 0 | ||
| | | v7 में से 1 घटाएं | ||
v2 में 1 जोड़ें | |||
| align="center" | A | | align="center" | A | ||
|- | |- | ||
| align="center" | <math>\frac{7}{2}</math> | | align="center" | <math>\frac{7}{2}</math> | ||
| v3 = 0 and<br>v7 = 0 and<br>v2 > 0 | | v3 = 0 and<br>v7 = 0 and<br>v2 > 0 | ||
| | | v2 में से 1 घटाएं | ||
v7 में 1 जोड़ें | |||
| align="center" | B | | align="center" | B | ||
|- | |- | ||
| | | | ||
| v2 = 0 and<br>v3 = 0 and<br>v7 = 0 | | v2 = 0 and<br>v3 = 0 and<br>v7 = 0 | ||
| | | रुकना | ||
| | | | ||
|} | |} | ||
Line 282: | Line 299: | ||
== टिप्पणियाँ == | == टिप्पणियाँ == | ||
== यह भी देखें == | == यह भी देखें == | ||
* निर्देश | * निर्देश स्थिर करना कंप्यूटर | ||
== संदर्भ == | == संदर्भ == | ||
Line 341: | Line 357: | ||
== बाहरी कड़ियाँ == | == बाहरी कड़ियाँ == | ||
*[https://www.uctv.tv/shows/Fractran-A-Ridiculous-Logical-Language-with-John-Conway-23320 Lecture from John Conway। "फ्रैक्ट्रान। A Ridiculous Logical Language"] | *[https://www.uctv.tv/shows/Fractran-A-Ridiculous-Logical-Language-with-John-Conway-23320 Lecture from John Conway। "फ्रैक्ट्रान। A Ridiculous Logical Language"] | ||
*[http://scienceblogs.com/goodmath/2006/10/27/prime-number-pathology-fractra/ "Prime Number Pathology। फ्रैक्ट्रान"] | *[http://scienceblogs.com/goodmath/2006/10/27/prime-number-pathology-fractra/ "Prime Number Pathology। फ्रैक्ट्रान"] | ||
Line 351: | Line 366: | ||
*[http://malisper.me/2016/06/11/building-fizzbuzz-fractran-bottom/ "Building Fizzbuzz in फ्रैक्ट्रान from the Bottom Up"] | *[http://malisper.me/2016/06/11/building-fizzbuzz-fractran-bottom/ "Building Fizzbuzz in फ्रैक्ट्रान from the Bottom Up"] | ||
*[https://web.archive.org/web/20180104084828/http://clomont.com/a-universal-fractran-interpreter-in-fractran/ Chris Lomont, "A Universal फ्रैक्ट्रान Interpreter in फ्रैक्ट्रान"] | *[https://web.archive.org/web/20180104084828/http://clomont.com/a-universal-fractran-interpreter-in-fractran/ Chris Lomont, "A Universal फ्रैक्ट्रान Interpreter in फ्रैक्ट्रान"] | ||
<references group="note" responsive="0" /> | |||
[[Category:Created On 03/02/2023]] | [[Category:Created On 03/02/2023]] | ||
[[Category:Lua-based templates]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Short description with empty Wikidata description]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that generate short descriptions]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:गणना के मॉडल]] | |||
[[Category:गूढ़ प्रोग्रामिंग भाषाएँ]] | |||
[[Category:मनोरंजक गणित]] |
Latest revision as of 20:40, 9 February 2023
फ्रैक्ट्रान ट्यूरिंग-पूर्ण गूढ़ प्रोग्रामिंग भाषा है, जिसका आविष्कार गणितज्ञ जॉन हॉर्टन कॉनवे ने किया था। फ्रैक्ट्रान प्रोग्राम सकारात्मक भिन्न (गणित) का प्रारंभिक पूर्णांक निविष्ट N के साथ अनुक्रम है। प्रोग्राम निम्नानुसार पूर्णांक 'N' को अद्यतन करके चलाया जाता है।
- पहले भिन्न F के लिए सूची में जिसके लिए NF पूर्णांक है, N को NF से बदलें।
- इस नियम को तब तक करते रहे, जब तक कि सूची में कोई भी भिन्न N से गुणा करने पर पूर्णांक नहीं बनाता, फिर रुक जाता है।
कोनवे 1987 निम्नलिखित फ्रैक्ट्रान प्रोग्राम देता है, जिसे प्राइमगेम कहा जाता है, जो क्रमिक अभाज्य संख्याएँ पाता है।
- 2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, . . .
2 के बाद, इस क्रम में 2 की निम्नलिखित घातांक हैं।
फ्रैक्ट्रान प्रोग्राम को समझना
फ्रैक्ट्रान प्रोग्राम को प्रकार की रजिस्टर मशीन के रूप में देखा जा सकता है, जहाँ रजिस्टरों को तर्क n में प्रमुख घातांक में संग्रहीत किया जाता है।
गोडेल संख्या का उपयोग करते हुए, सकारात्मक पूर्णांक n स्वेच्छया से बड़े सकारात्मक पूर्णांक चर की स्वेच्छा संख्या को सांकेतिक शब्दों में बदल सकता है।[note 1] प्रत्येक चर का मान पूर्णांक के पूर्णांक गुणनखंड में अभाज्य संख्या के घातांक के रूप में सांकेतिक किया गया है। उदाहरण के लिए, पूर्णांक
फ्रैक्ट्रान प्रोग्राम सकारात्मक भिन्नों की क्रमबद्ध सूची है। प्रत्येक भिन्न निर्देश का प्रतिनिधित्व करता है जो अधिक चर का परीक्षण करता है। जो इसके भाजक के प्रमुख कारकों द्वारा दर्शाया जाता है। उदाहरण के लिए,
- हर बार निर्देश निष्पादित किया जाता है, परीक्षण किए गए चर भी कम हो जाते हैं।
- चर को निर्देश में घटाया और बढ़ाया नहीं जा सकता हैं। अन्यथा उस निर्देश का प्रतिनिधित्व करने वाला भिन्न अपने निम्नतम शब्दों में नहीं होगा। इसलिए प्रत्येक फ्रैक्ट्रान निर्देश चर का उपभोग करता है क्योंकि यह उनका परीक्षण करता है।
- यदि चर 0 है, तो फ्रैक्ट्रान निर्देश के लिए सीधे परीक्षण करना संभव नहीं है। चूंकि, अप्रत्यक्ष परीक्षण को व्यतिक्रम निर्देश बनाकर लागू किया जा सकता है जो किसी विशेष चर का परीक्षण करने वाले अन्य निर्देशों के बाद रखा जाता है।
सरल प्रोग्राम बनाना
जोड़
सबसे सरल फ्रैक्ट्रान प्रोग्राम एकल निर्देश है जैसे
फ्रैक्ट्रान निर्देश |
परिस्थिति | क्रिया |
---|---|---|
v2 > 0 | v2 में से 1 घटाएं
v3 में 1 जोड़ें | |
v2 = 0 | रुकना |
प्रपत्र के प्रारंभिक निविष्ट को देखते हुए , यह प्रोग्राम अनुक्रम की गणना करेगा , , आदि, अंततः, के बाद तक चरण, 2 का कोई कारक नहीं रहता है और उत्पाद के साथ अब कोई पूर्णांक नहीं देता है। मशीन तब के अंतिम आउटपुट के साथ बंद हो जाती है . इसलिए यह दो पूर्णांकों को साथ जोड़ता है।
गुणा
हम योजक के माध्यम से लूप करके गुणक बना सकते हैं। ऐसा करने के लिए हमें अपने कलन विधि में स्थिति (कंप्यूटर विज्ञान) प्रस्तुत करने की आवश्यकता है। यह कलन विधि संख्या लेगा और उत्पादन है।
वर्तमान स्थिति | परिस्थिति | क्रिया | आगे की स्थिति |
---|---|---|---|
A | v7 > 0 | v7 में से 1 घटाएं
v3 में 1 जोड़ें |
A |
v7 = 0 and v2 > 0 |
v2 में से 1 घटाएं | B | |
v7 = 0 and v2 = 0 and v3 > 0 |
v3 में से 1 घटाएं | A | |
v7 = 0 and v2 = 0 and v3 = 0 |
रुकना | ||
B | v3 > 0 | v3 में से 1 घटाएं
v5 में 1 जोड़ें v7 में 1 जोड़ें |
B |
v3 = 0 | कोई नहीं | A |
स्थिति B लूप है जो v3 को v5 में जोड़ता है और v3 को v7 में भी ले जाता है, और स्थिति A बाहरी नियंत्रण लूप है जो लूप को स्थिति B v2 बार दोहराता है। स्थिति B में लूप पूरा होने के बाद स्थिति A भी v7 से v3 के मान को पुनर्स्थापित करता है।
हम स्थिति संकेतकों के रूप में नए चरों का उपयोग करके स्थितियों को लागू कर सकते हैं। स्थिति B के लिए स्थिति संकेतक v11 और v13 होंगे। ध्यान दें कि हमें लूप के लिए दो स्थिति नियंत्रण संकेतकों की आवश्यकता होती है। प्राथमिक ध्वज (v11) और द्वितीयक ध्वज (v13)। क्योंकि जब भी परीक्षण किया जाता है, तो प्रत्येक संकेतक का उपभोग किया जाता है। हमें वर्तमान स्थिति में जारी रखने के लिए द्वितीयक संकेतक की आवश्यकता होती है। इस द्वितीयक संकेतक को अगले निर्देश में प्राथमिक संकेतक पर वापस बदलना किया जाता है और लूप जारी रहता है।
गुणन कलन विधि तालिका में फ्रैक्ट्रान स्थिति संकेतक और निर्देश जोड़ना, हमारे पास है।
फ्रैक्ट्रान निर्देश |
वर्तमान स्थिति | राज्य
संकेतक |
परिस्थिति | क्रिया | आगे की स्थिति |
---|---|---|---|---|---|
A | कोई नहीं | v7 > 0 | v7 में से 1 घटाएं
v3 में 1 जोड़ें |
A | |
v7 = 0 and v2 > 0 |
स्थितियोंv2 में से 1 घटाएं | B | |||
v7 = 0 and v2 = 0 and v3 > 0 |
v3 में से 1 घटाएं | A | |||
v7 = 0 and v2 = 0 and v3 = 0 |
रुकना | ||||
B | v11, v13 | v3 > 0 | v3 में से 1 घटाएं
v5 में 1 जोड़ें v7 में 1 जोड़ें |
B | |
v3 = 0 | कोई नहीं | A |
जब हम फ्रैक्ट्रान निर्देश लिखते हैं, तो हमें स्थिति A निर्देश को अंतिम में रखना चाहिए, क्योंकि स्थिति A में कोई स्थिति संकेतक नहीं है यदि कोई स्थिति संकेतक स्थिर नहीं है तो यह व्यतिक्रम स्थिति है। जिससे फ्रैक्ट्रान प्रोग्राम के रूप में गुणक बन जाता है।
घटाव और भाग
इसी प्रकार, हम फ्रैक्ट्रान घटाव बना सकते हैं और बार-बार घटाव हमें भागफल और शेष कलन विधि बनाने की अनुमति देता है।
फ्रैक्ट्रान निर्देश |
वर्तमान स्थिति | स्थिति संकेतक | परिस्थिति | क्रिया | आगे की स्थिति |
---|---|---|---|---|---|
A | v11, v13 | v2 > 0 and v3 > 0 |
v2 में से 1 घटाएं
v3 में से 1 घटाएं v7 में 1 जोड़ें |
A | |
v2 = 0 and v3 > 0 |
v3 में से 1 घटाएं | X | |||
v3 = 0 | v5 में 1 जोड़ें | B | |||
B | v17, v19 | v7 > 0 | v7 में से 1 घटाएं
v3 में 1 जोड़ें |
B | |
v7 = 0 | कोई नहीं | A | |||
X | v3 > 0 | v3 में से 1 घटाएं | X | ||
v3 = 0 | रुकना |
फ्रैक्ट्रान प्रोग्राम को लिखते हुए, हमारे पास।
कॉनवे का प्रमुख कलन विधि
उपरोक्त कॉनवे का प्रमुख उत्पादन कलन विधि अनिवार्य रूप से दो लूप के भीतर भागफल और शेष कलन विधि है। प्रपत्र का निविष्ट दिया गया जहाँ 0 ≤ m < n, कलन विधि n+1 को प्रत्येक संख्या से n से 1 तक विभाजित करने का प्रयास करता है। जब तक कि यह सबसे बड़ी संख्या k नहीं पाता ,जो n+1 का भाजक है। यह फिर 2 लौटाता है 2n+1 7k-1 दोहराता है। कलन विधि द्वारा उत्पन्न स्थिति संख्याओं का अनुक्रम केवल 2 की घात उत्पन्न करता है जब K 1 होता है जिससे कि 7 का घातांक 0 हो, जो केवल तब होता है जब 2 का घातांक अभाज्य होता है। हैविल (2007) में कॉनवे के कलन विधि की चरण-दर-चरण व्याख्या पाई जा सकती है।
इस प्रोग्राम के लिए अभाज्य संख्या 2, 3, 5, 7... तक पहुँचने के लिए क्रमशः 19, 69, 281, 710,... चरणों की आवश्यकता है।
कॉनवे के प्रोग्राम का प्रकार भी उपस्थित है,[1] जो उपरोक्त संस्करण से दो भिन्नों से भिन्न है।
अन्य उदाहरण
निम्नलिखित फ्रैक्ट्रान प्रोग्राम।
फ्रैक्ट्रान निर्देश |
वर्तमान स्थिति | स्थिति संकेतक | परिस्थिति | क्रिया | आगे की स्थिति |
---|---|---|---|---|---|
A | v5, v11 | v2 > 1 | v2 में से 2 घटाएं
v3 में 1 जोड़ें |
A | |
v2 = 1 | v2 में से 1 घटाएं
v13 में 1 जोड़ें |
B | |||
v2 = 0 | कोई नहीं | B | |||
B | कोई नहीं | v3 > 0 | v3 में से 1 घटाएं
v2 में 1 जोड़ें |
B | |
v3 = 0 and v7 > 0 |
v7 में से 1 घटाएं
v2 में 1 जोड़ें |
A | |||
v3 = 0 and v7 = 0 and v2 > 0 |
v2 में से 1 घटाएं
v7 में 1 जोड़ें |
B | |||
v2 = 0 and v3 = 0 and v7 = 0 |
रुकना |
टिप्पणियाँ
यह भी देखें
- निर्देश स्थिर करना कंप्यूटर
संदर्भ
- ↑ Guy 1983, p. 26; Conway 1996, p. 147
- ↑ Guy 1983, p. 33
- ↑ Havil 2007, p. 176
- ↑ John Baez, Puzzle #4, The n-Category Café
- Guy, Richard K. (1983). "Conway's Prime Producing Machine". Mathematics Magazine. Taylor & Francis. 56 (1): 26–33. doi:10.1080/0025570X.1983.11977011.
- Conway, John H. (1987). "FRACTRAN: A simple universal programming language for arithmetic". Open Problems in Communication and Computation. Springer-Verlag New York, Inc.: 4–26. doi:10.1007/978-1-4612-4808-8_2. ISBN 978-1-4612-9162-6.
- Conway, John H.; Guy, Richard K. (1996). The Book of Numbers. Springer-Verlag New York, Inc. ISBN 0-387-97993-X.
- Havil, Julian (2007). Nonplussed!. Princeton University Press. ISBN 978-0-691-12056-0.
- Roberts, Siobhan (2015). "Criteria of virtue". Genius At Play - The Curious Mind of John Horton Conway. Bloomsbury. pp. 115–119. ISBN 978-1-62040-593-2.
बाहरी कड़ियाँ
- Lecture from John Conway। "फ्रैक्ट्रान। A Ridiculous Logical Language"
- "Prime Number Pathology। फ्रैक्ट्रान"
- Weisstein, Eric W. "FRACTRAN". MathWorld.
- Prime Number Pathology
- फ्रैक्ट्रान - (Esolang wiki)
- Ruby implementation and example programs
- Project Euler Problem 308
- "Building Fizzbuzz in फ्रैक्ट्रान from the Bottom Up"
- Chris Lomont, "A Universal फ्रैक्ट्रान Interpreter in फ्रैक्ट्रान"
- ↑ Gödel numbering cannot be directly used for negative integers, floating point numbers or text strings, although conventions could be adopted to represent these data types indirectly. Proposed extensions to FRACTRAN include FRACTRAN++ and Bag.
- ↑ A similar multiplier algorithm is described at the Esolang FRACTRAN page.