फ्रैक्ट्रान
फ्रैक्ट्रान ट्यूरिंग-पूर्ण गूढ़ प्रोग्रामिंग भाषा है, जिसका आविष्कार गणितज्ञ जॉन हॉर्टन कॉनवे ने किया था। फ्रैक्ट्रान प्रोग्राम सकारात्मक अंश (गणित) का प्रारंभिक पूर्णांक इनपुट 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 फ्रैक्ट्रान"
Cite error: <ref>
tags exist for a group named "note", but no corresponding <references group="note"/>
tag was found