फ्रैक्ट्रान: Difference between revisions
(Created page with "{{short description|Turing-complete esoteric programming language invented by John Conway}} FRACTRAN एक ट्यूरिंग-पूर्ण गूढ़ प्...") |
No edit summary |
||
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'' | # पहले अंश ''f'' के लिए सूची में जिसके लिए ''nf'' पूर्णांक है, ''n'' को ''nf'' से बदलें | ||
#इस नियम को तब तक दोहराएं जब तक कि सूची में कोई भी अंश ''n'' से गुणा करने पर पूर्णांक नहीं बनाता, फिर रुक जाता है। | #इस नियम को तब तक दोहराएं जब तक कि सूची में कोई भी अंश ''n'' से गुणा करने पर पूर्णांक नहीं बनाता, फिर रुक जाता है। | ||
{{harvnb|Conway|1987}} निम्नलिखित | {{harvnb|Conway|1987}} निम्नलिखित फ्रैक्ट्रान प्रोग्राम देता है, जिसे PRIMEGAME कहा जाता है, जो क्रमिक [[अभाज्य संख्या]]एँ पाता है। | ||
<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, ... {{OEIS|id=A007542}} | * 2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, ... {{OEIS|id=A007542}} | ||
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> {{OEIS|id=A034785}} | <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> {{OEIS|id=A034785}} | ||
जो 2 की प्रधान शक्तियाँ हैं। | जो 2 की प्रधान शक्तियाँ हैं। | ||
== | == फ्रैक्ट्रान कार्यक्रम को समझना == | ||
फ्रैक्ट्रान प्रोग्राम को प्रकार की [[रजिस्टर मशीन]] के रूप में देखा जा सकता है जहाँ रजिस्टरों को तर्क 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 है तो फ्रैक्ट्रान निर्देश के लिए सीधे परीक्षण करना संभव नहीं है (हालांकि, अप्रत्यक्ष परीक्षण को डिफ़ॉल्ट निर्देश बनाकर लागू किया जा सकता है जो किसी विशेष चर का परीक्षण करने वाले अन्य निर्देशों के बाद रखा जाता है।)। | ||
== सरल प्रोग्राम बनाना == | == सरल प्रोग्राम बनाना == | ||
=== जोड़ === | === जोड़ === | ||
सबसे सरल | सबसे सरल फ्रैक्ट्रान प्रोग्राम ल निर्देश है जैसे | ||
<math display="block">\left( \frac{3}{2} \right)</math> | <math display="block">\left( \frac{3}{2} \right)</math> | ||
इस कार्यक्रम को निम्नानुसार (बहुत सरल) एल्गोरिथम के रूप में दर्शाया जा सकता | इस कार्यक्रम को निम्नानुसार (बहुत सरल) एल्गोरिथम के रूप में दर्शाया जा सकता है। | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! फ्रैक्ट्रान<br>instruction | ||
! Condition | ! Condition | ||
! Action | ! Action | ||
Line 57: | Line 57: | ||
| Stop | | Stop | ||
|} | |} | ||
प्रपत्र के प्रारंभिक इनपुट को देखते हुए <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>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" | ||
Line 95: | Line 95: | ||
| align="center" | A | | align="center" | A | ||
|} | |} | ||
स्टेट बी | स्टेट बी लूप है जो v3 को v5 में जोड़ता है और v3 को v7 में भी ले जाता है, और स्टेट ए बाहरी कंट्रोल लूप है जो लूप को स्टेट बी v2 बार दोहराता है। स्टेट बी में लूप पूरा होने के बाद स्टेट ए भी v7 से v3 के मान को पुनर्स्थापित करता है। | ||
हम राज्य संकेतकों के रूप में नए चरों का उपयोग करके राज्यों को लागू कर सकते हैं। राज्य B के लिए राज्य संकेतक v11 और v13 होंगे। ध्यान दें कि हमें | हम राज्य संकेतकों के रूप में नए चरों का उपयोग करके राज्यों को लागू कर सकते हैं। राज्य B के लिए राज्य संकेतक v11 और v13 होंगे। ध्यान दें कि हमें लूप के लिए दो राज्य नियंत्रण संकेतकों की आवश्यकता होती है; प्राथमिक ध्वज (v11) और द्वितीयक ध्वज (v13)। क्योंकि जब भी परीक्षण किया जाता है तो प्रत्येक संकेतक का उपभोग किया जाता है, हमें वर्तमान स्थिति में जारी रखने के लिए द्वितीयक संकेतक की आवश्यकता होती है; इस द्वितीयक संकेतक को अगले निर्देश में प्राथमिक संकेतक पर वापस स्वैप किया जाता है, और लूप जारी रहता है। | ||
गुणन एल्गोरिथम तालिका में | गुणन एल्गोरिथम तालिका में फ्रैक्ट्रान राज्य संकेतक और निर्देश जोड़ना, हमारे पास है। | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! फ्रैक्ट्रान<br>instruction | ||
! Current state | ! Current state | ||
! State<br>indicators | ! State<br>indicators | ||
Line 144: | Line 144: | ||
| 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>ए</sup>3<sup>b</sup> यह प्रोग्राम आउटपुट 5 उत्पन्न करता है<sup>अब</सुप>. <ref group=note>A similar multiplier algorithm is described at the [http://www.esolangs.org/wiki/Fractran Esolang FRACTRAN page].</ref> | इनपुट के साथ 2<sup>ए</sup>3<sup>b</sup> यह प्रोग्राम आउटपुट 5 उत्पन्न करता है<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>instruction | ||
! Current state | ! Current state | ||
! State<br>indicators | ! State<br>indicators | ||
Line 204: | Line 204: | ||
| | | | ||
|} | |} | ||
फ्रैक्ट्रान प्रोग्राम को लिखते हुए, हमारे पास। | |||
<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> | ||
Line 210: | Line 210: | ||
== कॉनवे का प्रमुख एल्गोरिथम == | == कॉनवे का प्रमुख एल्गोरिथम == | ||
उपरोक्त कॉनवे का प्राइम जनरेटिंग एल्गोरिथम अनिवार्य रूप से दो लूप के भीतर | उपरोक्त कॉनवे का प्राइम जनरेटिंग एल्गोरिथम अनिवार्य रूप से दो लूप के भीतर भागफल और शेष एल्गोरिथम है। प्रपत्र का इनपुट दिया गया <math>2^n 7^m</math> जहाँ 0 ≤ m < n, एल्गोरिथम n+1 को प्रत्येक संख्या से n से 1 तक विभाजित करने का प्रयास करता है, जब तक कि यह सबसे बड़ी संख्या k नहीं पाता जो n+1 का भाजक है। यह फिर 2 लौटाता है<sup>एन+1</sup> 7<sup>k-1</sup> और दोहराता है। एल्गोरिदम द्वारा उत्पन्न राज्य संख्याओं का अनुक्रम केवल 2 की शक्ति उत्पन्न करता है जब के 1 होता है (ताकि 7 का ्सपोनेंट 0 हो), जो केवल तब होता है जब 2 का ्सपोनेंट प्राइम होता है। हैविल (2007) में कॉनवे के एल्गोरिथम की चरण-दर-चरण व्याख्या पाई जा सकती है। | ||
इस प्रोग्राम के लिए अभाज्य संख्या 2, 3, 5, 7... तक पहुँचने के लिए क्रमशः 19, 69, 281, 710,... चरणों की आवश्यकता है {{OEIS|id=A007547}}. | इस प्रोग्राम के लिए अभाज्य संख्या 2, 3, 5, 7... तक पहुँचने के लिए क्रमशः 19, 69, 281, 710,... चरणों की आवश्यकता है {{OEIS|id=A007547}}. | ||
कॉनवे के कार्यक्रम का | कॉनवे के कार्यक्रम का प्रकार भी मौजूद है,<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... कदम लगते हैं {{OEIS|id=A007546}}. इस कार्यक्रम का ल पुनरावृत्ति, प्रधानता के लिए विशेष संख्या 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> एन और का सबसे बड़ा पूर्णांक विभाजक है <math>\lfloor x \rfloor</math> [[फर्श समारोह]] है।<ref>{{harvnb|Guy|1983|p=33}}</ref> | कहाँ पे <math>b < N</math> एन और का सबसे बड़ा पूर्णांक विभाजक है <math>\lfloor x \rfloor</math> [[फर्श समारोह]] है।<ref>{{harvnb|Guy|1983|p=33}}</ref> | ||
1999 में, डेविन किल्मिंस्टर ने | 1999 में, डेविन किल्मिंस्टर ने छोटे, दस-निर्देश कार्यक्रम का प्रदर्शन किया।<ref>{{harvnb|Havil|2007|p=176}}</ref> | ||
<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 की बाद की शक्तियों द्वारा क्रमिक अभाज्य उत्पन्न होते हैं। | प्रारंभिक इनपुट n = 10 के लिए 10 की बाद की शक्तियों द्वारा क्रमिक अभाज्य उत्पन्न होते हैं। | ||
Line 226: | Line 226: | ||
== अन्य उदाहरण == | == अन्य उदाहरण == | ||
निम्नलिखित | निम्नलिखित फ्रैक्ट्रान कार्यक्रम। | ||
<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> | ||
ए के बाइनरी विस्तार के [[हैमिंग वजन]] एच (ए) की गणना करता है यानी ए के बाइनरी विस्तार में 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>एच(क)</sup>। कार्यक्रम का विश्लेषण इस प्रकार किया जा सकता | ए के बाइनरी विस्तार के [[हैमिंग वजन]] एच (ए) की गणना करता है यानी ए के बाइनरी विस्तार में 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>एच(क)</sup>। कार्यक्रम का विश्लेषण इस प्रकार किया जा सकता है। | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! फ्रैक्ट्रान<br>instruction | ||
! Current state | ! Current state | ||
! State<br>indicators | ! State<br>indicators | ||
Line 286: | Line 286: | ||
== यह भी देखें == | == यह भी देखें == | ||
* | * निर्देश सेट कंप्यूटर | ||
== संदर्भ == | == संदर्भ == | ||
Line 342: | Line 342: | ||
== बाहरी कड़ियाँ == | == बाहरी कड़ियाँ == | ||
{{commons category|Fractran (programming language)}} | {{commons category|Fractran (programming language)}} | ||
*[https://www.uctv.tv/shows/Fractran-A-Ridiculous-Logical-Language-with-John-Conway-23320 Lecture from John | *[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 | *[http://scienceblogs.com/goodmath/2006/10/27/prime-number-pathology-fractra/ "Prime Number Pathology। फ्रैक्ट्रान"] | ||
* {{MathWorld |urlname=FRACTRAN |title=FRACTRAN}} | * {{MathWorld |urlname=FRACTRAN |title=FRACTRAN}} | ||
*[http://brainwagon.org/?p=2207 ''Prime Number Pathology''] | *[http://brainwagon.org/?p=2207 ''Prime Number Pathology''] | ||
*[http://www.esolangs.org/wiki/Fractran | *[http://www.esolangs.org/wiki/Fractran फ्रैक्ट्रान] - (Esolang wiki) | ||
*[https://web.archive.org/web/20130125232746/http://www.dev.gd/20130121-fun-with-john-conways-fractran.html Ruby implementation and example programs] | *[https://web.archive.org/web/20130125232746/http://www.dev.gd/20130121-fun-with-john-conways-fractran.html Ruby implementation and example programs] | ||
*[https://projecteuler.net/problem=308 Project Euler Problem 308] | *[https://projecteuler.net/problem=308 Project Euler Problem 308] | ||
*[http://malisper.me/2016/06/11/building-fizzbuzz-fractran-bottom/ "Building Fizzbuzz in | *[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 | *[https://web.archive.org/web/20180104084828/http://clomont.com/a-universal-fractran-interpreter-in-fractran/ Chris Lomont, "A Universal फ्रैक्ट्रान Interpreter in फ्रैक्ट्रान"] | ||
[[Category: गणना के मॉडल]] [[Category: गूढ़ प्रोग्रामिंग भाषाएँ]] [[Category: मनोरंजक गणित]] | [[Category: गणना के मॉडल]] [[Category: गूढ़ प्रोग्रामिंग भाषाएँ]] [[Category: मनोरंजक गणित]] | ||
Revision as of 23:08, 8 February 2023
फ्रैक्ट्रान ट्यूरिंग-पूर्ण गूढ़ प्रोग्रामिंग भाषा है, जिसका आविष्कार गणितज्ञ जॉन हॉर्टन कॉनवे ने किया था। फ्रैक्ट्रान कार्यक्रम सकारात्मक अंश (गणित) का प्रारंभिक सकारात्मक पूर्णांक इनपुट n के साथ अनुक्रम है। कार्यक्रम निम्नानुसार पूर्णांक 'n' को अद्यतन करके चलाया जाता है।
- पहले अंश f के लिए सूची में जिसके लिए nf पूर्णांक है, n को nf से बदलें
- इस नियम को तब तक दोहराएं जब तक कि सूची में कोई भी अंश n से गुणा करने पर पूर्णांक नहीं बनाता, फिर रुक जाता है।
Conway 1987 निम्नलिखित फ्रैक्ट्रान प्रोग्राम देता है, जिसे PRIMEGAME कहा जाता है, जो क्रमिक अभाज्य संख्याएँ पाता है।
2 के बाद, इस क्रम में 2 की निम्नलिखित शक्तियाँ हैं।
फ्रैक्ट्रान कार्यक्रम को समझना
फ्रैक्ट्रान प्रोग्राम को प्रकार की रजिस्टर मशीन के रूप में देखा जा सकता है जहाँ रजिस्टरों को तर्क n में प्राइम ्सपोनेंट्स में संग्रहीत किया जाता है।
गोडेल नंबरिंग का उपयोग करते हुए, सकारात्मक पूर्णांक n मनमाने ढंग से बड़े सकारात्मक पूर्णांक चर की मनमानी संख्या को सांकेतिक शब्दों में बदल सकता है।[note 1] प्रत्येक चर का मान पूर्णांक के पूर्णांक गुणनखंड में अभाज्य संख्या के घातांक के रूप में एन्कोड किया गया है। उदाहरण के लिए, पूर्णांक
फ्रैक्ट्रान कार्यक्रम सकारात्मक अंशों की क्रमबद्ध सूची है। प्रत्येक अंश निर्देश का प्रतिनिधित्व करता है जो या से अधिक चर का परीक्षण करता है, जो इसके भाजक के प्रमुख कारकों द्वारा दर्शाया जाता है। उदाहरण के लिए।
- हर बार निर्देश निष्पादित किया जाता है, परीक्षण किए गए चर भी कम हो जाते हैं।
- ही चर को ही निर्देश में घटाया और बढ़ाया नहीं जा सकता (अन्यथा उस निर्देश का प्रतिनिधित्व करने वाला अंश अपने निम्नतम शब्दों में नहीं होगा)। इसलिए प्रत्येक फ्रैक्ट्रान निर्देश चर का उपभोग करता है क्योंकि यह उनका परीक्षण करता है।
- यदि चर 0 है तो फ्रैक्ट्रान निर्देश के लिए सीधे परीक्षण करना संभव नहीं है (हालांकि, अप्रत्यक्ष परीक्षण को डिफ़ॉल्ट निर्देश बनाकर लागू किया जा सकता है जो किसी विशेष चर का परीक्षण करने वाले अन्य निर्देशों के बाद रखा जाता है।)।
सरल प्रोग्राम बनाना
जोड़
सबसे सरल फ्रैक्ट्रान प्रोग्राम ल निर्देश है जैसे
फ्रैक्ट्रान instruction |
Condition | Action |
---|---|---|
v2 > 0 | Subtract 1 from v2 Add 1 to v3 | |
v2 = 0 | Stop |
प्रपत्र के प्रारंभिक इनपुट को देखते हुए , यह प्रोग्राम अनुक्रम की गणना करेगा , , आदि, अंततः, के बाद तक चरण, 2 का कोई कारक नहीं रहता है और उत्पाद के साथ अब कोई पूर्णांक नहीं देता है; मशीन तब के अंतिम आउटपुट के साथ बंद हो जाती है . इसलिए यह दो पूर्णांकों को साथ जोड़ता है।
गुणा
हम योजक के माध्यम से लूप करके गुणक बना सकते हैं। ऐसा करने के लिए हमें अपने एल्गोरिदम में राज्य (कंप्यूटर विज्ञान) पेश करने की आवश्यकता है। यह एल्गोरिदम नंबर लेगा और उत्पादन ।
Current state | Condition | Action | Next state |
---|---|---|---|
A | v7 > 0 | Subtract 1 from v7 Add 1 to v3 |
A |
v7 = 0 and v2 > 0 |
Subtract 1 from v2 | B | |
v7 = 0 and v2 = 0 and v3 > 0 |
Subtract 1 from v3 | A | |
v7 = 0 and v2 = 0 and v3 = 0 |
Stop | ||
B | v3 > 0 | Subtract 1 from v3 Add 1 to v5 Add 1 to v7 |
B |
v3 = 0 | None | A |
स्टेट बी लूप है जो v3 को v5 में जोड़ता है और v3 को v7 में भी ले जाता है, और स्टेट ए बाहरी कंट्रोल लूप है जो लूप को स्टेट बी v2 बार दोहराता है। स्टेट बी में लूप पूरा होने के बाद स्टेट ए भी v7 से v3 के मान को पुनर्स्थापित करता है।
हम राज्य संकेतकों के रूप में नए चरों का उपयोग करके राज्यों को लागू कर सकते हैं। राज्य B के लिए राज्य संकेतक v11 और v13 होंगे। ध्यान दें कि हमें लूप के लिए दो राज्य नियंत्रण संकेतकों की आवश्यकता होती है; प्राथमिक ध्वज (v11) और द्वितीयक ध्वज (v13)। क्योंकि जब भी परीक्षण किया जाता है तो प्रत्येक संकेतक का उपभोग किया जाता है, हमें वर्तमान स्थिति में जारी रखने के लिए द्वितीयक संकेतक की आवश्यकता होती है; इस द्वितीयक संकेतक को अगले निर्देश में प्राथमिक संकेतक पर वापस स्वैप किया जाता है, और लूप जारी रहता है।
गुणन एल्गोरिथम तालिका में फ्रैक्ट्रान राज्य संकेतक और निर्देश जोड़ना, हमारे पास है।
फ्रैक्ट्रान instruction |
Current state | State indicators |
Condition | Action | Next state |
---|---|---|---|---|---|
A | None | v7 > 0 | Subtract 1 from v7 Add 1 to v3 |
A | |
v7 = 0 and v2 > 0 |
Subtract 1 from v2 | B | |||
v7 = 0 and v2 = 0 and v3 > 0 |
Subtract 1 from v3 | A | |||
v7 = 0 and v2 = 0 and v3 = 0 |
Stop | ||||
B | v11, v13 | v3 > 0 | Subtract 1 from v3 Add 1 to v5 Add 1 to v7 |
B | |
v3 = 0 | None | A |
जब हम फ्रैक्ट्रान निर्देश लिखते हैं, तो हमें राज्य A निर्देश को अंतिम रखना चाहिए, क्योंकि राज्य A में कोई राज्य संकेतक नहीं है - यदि कोई राज्य संकेतक सेट नहीं है तो यह डिफ़ॉल्ट स्थिति है। तो फ्रैक्ट्रान प्रोग्राम के रूप में, गुणक बन जाता है।
घटाव और भाग
इसी तरह, हम फ्रैक्ट्रान सबट्रैक्टर बना सकते हैं, और बार-बार घटाव हमें भागफल और शेष एल्गोरिथम बनाने की अनुमति देता है।
फ्रैक्ट्रान instruction |
Current state | State indicators |
Condition | Action | Next state |
---|---|---|---|---|---|
A | v11, v13 | v2 > 0 and v3 > 0 |
Subtract 1 from v2 Subtract 1 from v3 Add 1 to v7 |
A | |
v2 = 0 and v3 > 0 |
Subtract 1 from v3 | X | |||
v3 = 0 | Add 1 to v5 | B | |||
B | v17, v19 | v7 > 0 | Subtract 1 from v7 Add 1 to v3 |
B | |
v7 = 0 | None | A | |||
X | v3 > 0 | Subtract 1 from v3 | X | ||
v3 = 0 | Stop |
फ्रैक्ट्रान प्रोग्राम को लिखते हुए, हमारे पास।
कॉनवे का प्रमुख एल्गोरिथम
उपरोक्त कॉनवे का प्राइम जनरेटिंग एल्गोरिथम अनिवार्य रूप से दो लूप के भीतर भागफल और शेष एल्गोरिथम है। प्रपत्र का इनपुट दिया गया जहाँ 0 ≤ m < n, एल्गोरिथम n+1 को प्रत्येक संख्या से n से 1 तक विभाजित करने का प्रयास करता है, जब तक कि यह सबसे बड़ी संख्या k नहीं पाता जो n+1 का भाजक है। यह फिर 2 लौटाता हैएन+1 7k-1 और दोहराता है। एल्गोरिदम द्वारा उत्पन्न राज्य संख्याओं का अनुक्रम केवल 2 की शक्ति उत्पन्न करता है जब के 1 होता है (ताकि 7 का ्सपोनेंट 0 हो), जो केवल तब होता है जब 2 का ्सपोनेंट प्राइम होता है। हैविल (2007) में कॉनवे के एल्गोरिथम की चरण-दर-चरण व्याख्या पाई जा सकती है।
इस प्रोग्राम के लिए अभाज्य संख्या 2, 3, 5, 7... तक पहुँचने के लिए क्रमशः 19, 69, 281, 710,... चरणों की आवश्यकता है (sequence A007547 in the OEIS).
कॉनवे के कार्यक्रम का प्रकार भी मौजूद है,[1] जो उपरोक्त संस्करण से दो अंशों से भिन्न है।
अन्य उदाहरण
निम्नलिखित फ्रैक्ट्रान कार्यक्रम।
फ्रैक्ट्रान instruction |
Current state | State indicators |
Condition | Action | Next state |
---|---|---|---|---|---|
A | v5, v11 | v2 > 1 | Subtract 2 from v2 Add 1 to v3 |
A | |
v2 = 1 | Subtract 1 from v2 Add 1 to v13 |
B | |||
v2 = 0 | None | B | |||
B | None | v3 > 0 | Subtract 1 from v3 Add 1 to v2 |
B | |
v3 = 0 and v7 > 0 |
Subtract 1 from v7 Add 1 to v2 |
A | |||
v3 = 0 and v7 = 0 and v2 > 0 |
Subtract 1 from v2 add 1 to v7 |
B | |||
v2 = 0 and v3 = 0 and v7 = 0 |
Stop |
टिप्पणियाँ
- ↑ 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.
यह भी देखें
- निर्देश सेट कंप्यूटर
संदर्भ
- ↑ 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 फ्रैक्ट्रान"