फ्रैक्ट्रान: Difference between revisions

From Vigyanwiki
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' को अद्यतन करके चलाया जाता है।
फ्रैक्ट्रान [[ट्यूरिंग-पूर्ण]] [[गूढ़ प्रोग्रामिंग भाषा]] है, जिसका आविष्कार गणितज्ञ [[जॉन हॉर्टन कॉनवे]] ने किया था। फ्रैक्ट्रान प्रोग्राम सकारात्मक [[अंश (गणित)|भिन्न (गणित)]] का प्रारंभिक पूर्णांक निविष्ट ''N'' के साथ [[अनुक्रम]] है। प्रोग्राम निम्नानुसार पूर्णांक 'N' को अद्यतन करके चलाया जाता है।
# पहले अंश ''f'' के लिए सूची में जिसके लिए ''nf'' पूर्णांक है, ''n'' को ''nf'' से बदलें
# पहले भिन्न ''F'' के लिए सूची में जिसके लिए ''NF'' पूर्णांक है, ''N'' को NF से बदलें।
#इस नियम को तब तक दोहराएं जब तक कि सूची में कोई भी अंश ''n'' से गुणा करने पर पूर्णांक नहीं बनाता, फिर रुक जाता है।
#इस नियम को तब तक करते रहे, जब तक कि सूची में कोई भी भिन्न N से गुणा करने पर पूर्णांक नहीं बनाता, फिर रुक जाता है।


{{harvnb|Conway|1987}} निम्नलिखित फ्रैक्ट्रान प्रोग्राम देता है, जिसे PRIMEGAME कहा जाता है, जो क्रमिक [[अभाज्य संख्या]]एँ पाता है।
{{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, ... {{OEIS|id=A007542}}
* 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> {{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>जो 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> प्रत्येक चर का मान पूर्णांक के पूर्णांक गुणनखंड में अभाज्य संख्या के घातांक के रूप में एन्कोड किया गया है। उदाहरण के लिए, पूर्णांक
गोडेल संख्या का उपयोग करते हुए, सकारात्मक पूर्णांक 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 है।
रजिस्टर स्थिति का प्रतिनिधित्व करता है,चर जिसे हम 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>instruction
! फ्रैक्ट्रान<br>निर्देश
! Condition
! परिस्थिति
! Action
! क्रिया
|-
|-
| align="center" | <math>\frac{3}{2}</math>
| align="center" | <math>\frac{3}{2}</math>
| v2 > 0
| v2 > 0
| Subtract 1 from v2<br>Add 1 to v3
| v2 में से 1 घटाएं
v3 में 1 जोड़ें
|-
|-
|
|
| v2 = 0
| v2 = 0
| 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>
हम योजक के माध्यम से लूप करके गुणक बना सकते हैं। ऐसा करने के लिए हमें अपने कलन विधि में स्थिति [[राज्य (कंप्यूटर विज्ञान)|(कंप्यूटर विज्ञान)]] प्रस्तुत करने की आवश्यकता है। यह कलन विधि संख्या लेगा <math>2^a 3^b</math> और उत्पादन <math>5^{ab}</math> है।


{| class="wikitable"
{| class="wikitable"
|-
|-
! Current state
! वर्तमान स्थिति
! Condition
! परिस्थिति
! Action
! क्रिया
! Next state
! आगे की स्थिति
|-
|-
| rowspan="4" align="center" | A
| rowspan="4" align="center" | A
| v7 > 0
| v7 > 0
| Subtract 1 from v7<br>Add 1 to v3
| v7 में से 1 घटाएं
v3 में 1 जोड़ें
| align="center" | A
| align="center" | A
|-
|-
| v7 = 0 and<br>v2 > 0
| v7 = 0 and<br>v2 > 0
| Subtract 1 from v2
| 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
| Subtract 1 from v3
| 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
| Stop
| रुकना
|
|
|-
|-
| rowspan="2" align="center" | B
| rowspan="2" align="center" | B
| v3 > 0
| v3 > 0
| Subtract 1 from v3<br>Add 1 to v5<br>Add 1 to v7
| v3 में से 1 घटाएं
v5 में 1 जोड़ें
 
v7 में 1 जोड़ें
| align="center" | B
| align="center" | B
|-
|-
| v3 = 0
| v3 = 0
| None
| कोई नहीं
| align="center" | A
| align="center" | A
|}
|}
स्टेट बी लूप है जो v3 को v5 में जोड़ता है और v3 को v7 में भी ले जाता है, और स्टेट ए बाहरी कंट्रोल लूप है जो लूप को स्टेट बी v2 बार दोहराता है। स्टेट बी में लूप पूरा होने के बाद स्टेट ए भी v7 ​​से v3 के मान को पुनर्स्थापित करता है।
स्थिति B लूप है जो v3 को v5 में जोड़ता है और v3 को v7 में भी ले जाता है, और स्थिति A बाहरी नियंत्रण लूप है जो लूप को स्थिति B v2 बार दोहराता है। स्थिति B में लूप पूरा होने के बाद स्थिति A भी v7 ​​से v3 के मान को पुनर्स्थापित करता है।


हम राज्य संकेतकों के रूप में नए चरों का उपयोग करके राज्यों को लागू कर सकते हैं। राज्य B के लिए राज्य संकेतक v11 और v13 होंगे। ध्यान दें कि हमें लूप के लिए दो राज्य नियंत्रण संकेतकों की आवश्यकता होती है; प्राथमिक ध्वज (v11) और द्वितीयक ध्वज (v13)। क्योंकि जब भी परीक्षण किया जाता है तो प्रत्येक संकेतक का उपभोग किया जाता है, हमें वर्तमान स्थिति में जारी रखने के लिए द्वितीयक संकेतक की आवश्यकता होती है; इस द्वितीयक संकेतक को अगले निर्देश में प्राथमिक संकेतक पर वापस स्वैप किया जाता है, और लूप जारी रहता है।
हम स्थिति संकेतकों के रूप में नए चरों का उपयोग करके स्थितियों को लागू कर सकते हैं। स्थिति B के लिए स्थिति संकेतक v11 और v13 होंगे। ध्यान दें कि हमें लूप के लिए दो स्थिति नियंत्रण संकेतकों की आवश्यकता होती है। प्राथमिक ध्वज (v11) और द्वितीयक ध्वज (v13)। क्योंकि जब भी परीक्षण किया जाता है, तो प्रत्येक संकेतक का उपभोग किया जाता है। हमें वर्तमान स्थिति में जारी रखने के लिए द्वितीयक संकेतक की आवश्यकता होती है। इस द्वितीयक संकेतक को अगले निर्देश में प्राथमिक संकेतक पर वापस बदलना किया जाता है और लूप जारी रहता है।


गुणन एल्गोरिथम तालिका में फ्रैक्ट्रान राज्य संकेतक और निर्देश जोड़ना, हमारे पास है।
गुणन कलन विधि तालिका में फ्रैक्ट्रान स्थिति संकेतक और निर्देश जोड़ना, हमारे पास है।


{| class="wikitable"
{| class="wikitable"
|-
|-
! फ्रैक्ट्रान<br>instruction
! फ्रैक्ट्रान<br>निर्देश
! Current state
! वर्तमान स्थिति
! State<br>indicators
! राज्य
! Condition
संकेतक
! Action
! परिस्थिति
! Next state
! क्रिया
! आगे की स्थिति
|-
|-
| 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" | None
| rowspan="4" | कोई नहीं
| v7 > 0
| v7 > 0
| Subtract 1 from v7<br>Add 1 to v3
| 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
| Subtract 1 from v2
| स्थितियों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
| Subtract 1 from v3
| 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
| Stop
| रुकना
|
|
|-
|-
Line 136: Line 142:
| rowspan="2" | v11, v13
| rowspan="2" | v11, v13
| v3 > 0
| v3 > 0
| Subtract 1 from v3<br>Add 1 to v5<br>Add 1 to v7
| 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
| None
| कोई नहीं
| align="center" | A
| align="center" | A
|}
|}
जब हम फ्रैक्ट्रान निर्देश लिखते हैं, तो हमें राज्य A निर्देश को अंतिम रखना चाहिए, क्योंकि राज्य 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>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|उपरोक्त फ्रैक्ट्रान कार्यक्रम, 3 गुना 2 की गणना (ताकि इसका इनपुट है <math>2^3\times 3^2=72</math> और इसका आउटपुट होना चाहिए <math>5^6</math> क्योंकि 3 गुना 2 बराबर 6.]]
[[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
! फ्रैक्ट्रान<br>निर्देश
! Current state
! वर्तमान स्थिति
! State<br>indicators
! स्थिति संकेतक
! Condition
! परिस्थिति
! Action
! क्रिया
! Next state
! आगे की स्थिति
|-
|-
| 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
| Subtract 1 from v2<br>Subtract 1 from v3<br>Add 1 to v7
| 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
| Subtract 1 from v3
| 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
| Add 1 to v5
| v5 में 1 जोड़ें
| align="center" | B
| align="center" | B
|-
|-
Line 184: Line 196:
| rowspan="2" | v17, v19
| rowspan="2" | v17, v19
| v7 > 0
| v7 > 0
| Subtract 1 from v7<br>Add 1 to v3
| 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
| None
| कोई नहीं
| align="center" | A
| align="center" | A
|-
|-
Line 196: Line 209:
| rowspan="2" |
| rowspan="2" |
| v3 > 0
| v3 > 0
| Subtract 1 from v3
| v3 में से 1 घटाएं
| align="center" | X
| align="center" | X
|-
|-
|
|
| v3 = 0
| v3 = 0
| Stop
| रुकना
|
|
|}
|}
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>एन</sup>3<sup>d</sup>11 आउटपुट 5 उत्पन्न करता है<sup>क्ष</sup>7<sup>r</sup> जहां n = qd + r और 0 ≤ r < d।
और निविष्ट 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 लौटाता है<sup>एन+1</sup> 7<sup>k-1</sup> और दोहराता है। एल्गोरिदम द्वारा उत्पन्न राज्य संख्याओं का अनुक्रम केवल 2 की शक्ति उत्पन्न करता है जब के 1 होता है (ताकि 7 का ्सपोनेंट 0 हो), जो केवल तब होता है जब 2 का ्सपोनेंट प्राइम होता है। हैविल (2007) में कॉनवे के एल्गोरिथम की चरण-दर-चरण व्याख्या पाई जा सकती है।
उपरोक्त कॉनवे का प्रमुख उत्पादन कलन विधि अनिवार्य रूप से दो लूप के भीतर भागफल और शेष कलन विधि है। प्रपत्र का निविष्ट दिया गया <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,... चरणों की आवश्यकता है {{OEIS|id=A007547}}.
इस प्रोग्राम के लिए अभाज्य संख्या 2, 3, 5, 7... तक पहुँचने के लिए क्रमशः 19, 69, 281, 710,... चरणों की आवश्यकता है।


कॉनवे के कार्यक्रम का प्रकार भी मौजूद है,<ref>{{harvnb|Guy|1983|p=26}}; {{harvnb|Conway|1996|p=147}}</ref> जो उपरोक्त संस्करण से दो अंशों से भिन्न है।
कॉनवे के प्रोग्राम का प्रकार भी उपस्थित है,<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 की जाँच करते हुए, निम्नलिखित चरणों की संख्या लेता है।
यह संस्करण थोड़ा तेज़ है। 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> एन और का सबसे बड़ा पूर्णांक विभाजक है <math>\lfloor x \rfloor</math> [[फर्श समारोह]] है।<ref>{{harvnb|Guy|1983|p=33}}</ref>
जहाँ <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 में, डेविन किल्मिंस्टर ने छोटे, दस-निर्देश कार्यक्रम का प्रदर्शन किया।<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 की बाद की घातयों द्वारा क्रमिक अभाज्य उत्पन्न होते हैं।
<!-- It would be nice if someone could check this program, on the off-chance there is a typo in Havil. -->
 




== अन्य उदाहरण ==
== अन्य उदाहरण ==
निम्नलिखित फ्रैक्ट्रान कार्यक्रम।
निम्नलिखित फ्रैक्ट्रान प्रोग्राम।


<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>। कार्यक्रम का विश्लेषण इस प्रकार किया जा सकता है।
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>instruction
! फ्रैक्ट्रान<br>निर्देश
! Current state
! वर्तमान स्थिति
! State<br>indicators
! स्थिति संकेतक
! Condition
! परिस्थिति
! Action
! क्रिया
! Next state
! आगे की स्थिति
|-
|-
| 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
| Subtract 2 from v2<br>Add 1 to v3
| 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
| Subtract 1 from v2<br>Add 1 to v13
| 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
| None
| कोई नहीं
| 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" | None
| rowspan="4" | कोई नहीं
| v3 > 0
| v3 > 0
| Subtract 1 from v3<br>Add 1 to v2
| 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
| Subtract 1 from v7<br>Add 1 to v2
| 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
| Subtract 1 from v2<br>add 1 to v7
| 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
| Stop
| रुकना
|
|
|}
|}
Line 282: Line 299:


== टिप्पणियाँ ==
== टिप्पणियाँ ==
{{reflist|group=note|}}




== यह भी देखें ==
== यह भी देखें ==
* निर्देश सेट कंप्यूटर
* निर्देश स्थिर करना कंप्यूटर


== संदर्भ ==
== संदर्भ ==
Line 341: Line 357:


== बाहरी कड़ियाँ ==
== बाहरी कड़ियाँ ==
{{commons category|Fractran (programming language)}}
*[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 फ्रैक्ट्रान"]
[[Category: गणना के मॉडल]] [[Category: गूढ़ प्रोग्रामिंग भाषाएँ]] [[Category: मनोरंजक गणित]]
 
 
 
 
 




<references group="note" responsive="0" />


[[Category: Machine Translated Page]]
[[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' को अद्यतन करके चलाया जाता है।

  1. पहले भिन्न F के लिए सूची में जिसके लिए NF पूर्णांक है, N को NF से बदलें।
  2. इस नियम को तब तक करते रहे, जब तक कि सूची में कोई भी भिन्न N से गुणा करने पर पूर्णांक नहीं बनाता, फिर रुक जाता है।

कोनवे 1987 निम्नलिखित फ्रैक्ट्रान प्रोग्राम देता है, जिसे प्राइमगेम कहा जाता है, जो क्रमिक अभाज्य संख्याएँ पाता है।

N=2 से प्रारंभ होकर, यह फ्रैक्ट्रान प्रोग्राम पूर्णांकों के निम्नलिखित अनुक्रम उत्पन्न करता है।

  • 2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, . . .

2 के बाद, इस क्रम में 2 की निम्नलिखित घातांक हैं।

जो 2 की प्रधान घातांक हैं।

फ्रैक्ट्रान प्रोग्राम को समझना

फ्रैक्ट्रान प्रोग्राम को प्रकार की रजिस्टर मशीन के रूप में देखा जा सकता है, जहाँ रजिस्टरों को तर्क n में प्रमुख घातांक में संग्रहीत किया जाता है।

गोडेल संख्या का उपयोग करते हुए, सकारात्मक पूर्णांक n स्वेच्छया से बड़े सकारात्मक पूर्णांक चर की स्वेच्छा संख्या को सांकेतिक शब्दों में बदल सकता है।[note 1] प्रत्येक चर का मान पूर्णांक के पूर्णांक गुणनखंड में अभाज्य संख्या के घातांक के रूप में सांकेतिक किया गया है। उदाहरण के लिए, पूर्णांक

रजिस्टर स्थिति का प्रतिनिधित्व करता है,चर जिसे हम v2 कहेंगे जिसका मान 2 है और दो अन्य चर (v3 और v5) का मान 1 है। अन्य सभी चर का मान 0 है।

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

परीक्षण v2 और v5। यदि और , फिर यह v2 से 2 और v5 से 1 घटाता है और 1 को v3 और 1 को v7 में जोड़ता है। उदाहरण के लिए,

चूँकि, फ्रैक्ट्रान प्रोग्राम केवल भिन्नों की सूची है। ये परीक्षण-कमी-वृद्धि निर्देश फ्रैक्ट्रान भाषा में केवल अनुमत निर्देश हैं। इसके अतिरिक्त निम्नलिखित प्रतिबंध लागू होते हैं।

  • हर बार निर्देश निष्पादित किया जाता है, परीक्षण किए गए चर भी कम हो जाते हैं।
  • चर को निर्देश में घटाया और बढ़ाया नहीं जा सकता हैं। अन्यथा उस निर्देश का प्रतिनिधित्व करने वाला भिन्न अपने निम्नतम शब्दों में नहीं होगा। इसलिए प्रत्येक फ्रैक्ट्रान निर्देश चर का उपभोग करता है क्योंकि यह उनका परीक्षण करता है।
  • यदि चर 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 में कोई स्थिति संकेतक नहीं है यदि कोई स्थिति संकेतक स्थिर नहीं है तो यह व्यतिक्रम स्थिति है। जिससे फ्रैक्ट्रान प्रोग्राम के रूप में गुणक बन जाता है।

निविष्ट के साथ 2a3b यह प्रोग्राम आउटपुट 5ab उत्पन्न करता है. [note 2]

उपरोक्त फ्रैक्ट्रान प्रोग्राम, 3 गुना 2 की गणना (जिससे कि इसका निविष्ट है और इसका आउटपुट होना चाहिए क्योंकि 3 गुना 2 बराबर 6.

घटाव और भाग

इसी प्रकार, हम फ्रैक्ट्रान घटाव बना सकते हैं और बार-बार घटाव हमें भागफल और शेष कलन विधि बनाने की अनुमति देता है।

फ्रैक्ट्रान
निर्देश
वर्तमान स्थिति स्थिति संकेतक परिस्थिति क्रिया आगे की स्थिति
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 रुकना

फ्रैक्ट्रान प्रोग्राम को लिखते हुए, हमारे पास।

और निविष्ट 2n3d11 आउटपुट 5q7r उत्पन्न करता है, जहां n = qd + r और 0 ≤ r < d।

कॉनवे का प्रमुख कलन विधि

उपरोक्त कॉनवे का प्रमुख उत्पादन कलन विधि अनिवार्य रूप से दो लूप के भीतर भागफल और शेष कलन विधि है। प्रपत्र का निविष्ट दिया गया जहाँ 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] जो उपरोक्त संस्करण से दो भिन्नों से भिन्न है।

यह संस्करण थोड़ा तेज़ है। 2, 3, 5, 7... तक पहुँचने में इसे 19, 69, 280, 707... कदम लगते हैं। इस प्रोग्राम का एकल पुनरावृत्ति, प्रधानता के लिए विशेष संख्या N की जाँच करते हुए, निम्नलिखित चरणों की संख्या लेता है।
जहाँ , N का सबसे बड़ा पूर्णांक विभाजक है फ्लोर फंक्शन है।[2]1999 में, डेविन किल्मिंस्टर ने छोटे दस-निर्देश प्रोग्राम का प्रदर्शन किया।[3]
प्रारंभिक निविष्ट n = 10 के लिए 10 की बाद की घातयों द्वारा क्रमिक अभाज्य उत्पन्न होते हैं।


अन्य उदाहरण

निम्नलिखित फ्रैक्ट्रान प्रोग्राम।

A के द्विचर विस्तार के हैमिंग वजन H (A) की गणना करता है अर्थात Aके द्विचर विस्तार में 1 की संख्या।[4] दिया गया निविष्ट 2a, इसका आउटपुट 13H(a) है। प्रोग्राम का विश्लेषण इस प्रकार किया जा सकता है।

फ्रैक्ट्रान
निर्देश
वर्तमान स्थिति स्थिति संकेतक परिस्थिति क्रिया आगे की स्थिति
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
रुकना


टिप्पणियाँ

यह भी देखें

  • निर्देश स्थिर करना कंप्यूटर

संदर्भ

  1. Guy 1983, p. 26; Conway 1996, p. 147
  2. Guy 1983, p. 33
  3. Havil 2007, p. 176
  4. 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.


बाहरी कड़ियाँ




  1. 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.
  2. A similar multiplier algorithm is described at the Esolang FRACTRAN page.