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