प्योर (प्रोग्रामिंग लैंग्वेज)
File:Pure lang logo.png | |
Paradigm | Functional, declarative, term rewriting |
---|---|
द्वारा डिज़ाइन किया गया | Albert Gräf |
Developer | Albert Gräf |
पहली प्रस्तुति | 2008 |
Stable release | 0.68
/ 11 April 2018 |
टाइपिंग अनुशासन | Strong, dynamic |
ओएस | Cross-platform: FreeBSD, Linux, macOS, Windows |
लाइसेंस | GNU Lesser General Public License |
वेबसाइट | agraef |
Influenced by | |
Q, Haskell, Lisp, Alice, MATLAB |
शुद्ध, समीकरण भाषा Q के आनुक्रमिक, गतिशील रूप से टाइप की गई, कार्यात्मक प्रोग्रामिंग भाषा है जो शब्द पुनर्लेखन पर आधारित है। इसमें यूजर-डिफ़ाइंड ऑपरेटर (प्रोग्रामिंग) सिंटैक्स, मैक्रो (कंप्यूटर विज्ञान), यादृच्छिक-परिशुद्धता अंकगणित (बहु-परिशुद्धता संख्या) और एलएलवीएम के माध्यम से प्राकृत कूट के संकलन की सुविधा है। शुद्ध जीएनयू लेसर जनरल पब्लिक लाइसेंस वर्जन 3 या बाद के संस्करण के तहत वितरित (ज्यादातर) निःशुल्क और मुक्तस्रोत सॉफ्टवेयर है।
शुद्ध दुभाषिया और दोषमार्जक के साथ आता है, यह स्वचालित मेमोरी प्रबंधन प्रदान करता है, और इसमें शक्तिशाली कार्यात्मक और प्रतीकात्मक प्रोग्रामिंग क्षमताएं और C (प्रोग्रामिंग भाषा) में लाइब्रेरी (अभिकलन) के लिए इंटरफेस (उदाहरण के लिए, न्यूमेरिक्स, निम्न-स्तरीय प्रोटोकॉल और ऐसे अन्य कार्यों के लिए) हैं। उसी समय, शुद्ध छोटी भाषा है जिसे प्रारंभिक से डिजाइन किया गया है; इसका दुभाषिया बड़ा नहीं है, और लाइब्रेरी मॉड्यूल शुद्ध में लिखे गए हैं। शुद्ध का सिंटैक्स मिरांडा (प्रोग्रामिंग भाषा) और हास्केल (प्रोग्रामिंग भाषा) से मिलता-जुलता है, लेकिन यह मुक्त-प्रारूप भाषा है और इस तरह प्रोग्राम स्वरूप को निरूपित करने के लिए स्पष्ट सीमांकक (बजाय ऑफ साइड नियम इंडेंट) का उपयोग करता है।
शुद्ध भाषा समतुल्य प्रोग्रामिंग भाषा Q का आनुक्रमिक है, जो पहले जर्मनी के मेनज़ विश्वविद्यालय में एक ही लेखक अल्बर्ट ग्राफ द्वारा बनाई गई थी। Q के सापेक्ष, यह कुछ महत्वपूर्ण नई सुविधाएँ प्रदान करता है (जैसे कि लेक्सिकल स्कूपिंग, कुशल वेक्टर और मैट्रिक्स सपोर्ट के साथ स्थानीय फ़ंक्शंस, और बिल्ट-इन सी इंटरफ़ेस) और प्रोग्राम बहुत तेज़ी से चलते हैं क्योंकि वे फ्लाई पर मूल कोड के लिए जस्ट-इन-टाइम संकलन हैं। शुद्ध वर्तमान में ज्यादातर गणितीय अनुप्रयोगों और वैज्ञानिक कंप्यूटिंग के उद्देश्य से है, लेकिन इसका इंटरैक्टिव दुभाषिया वातावरण, सी इंटरफ़ेस और ऐडऑन मॉड्यूल का बढ़ता सेट इसे कई अन्य अनुप्रयोगों के लिए उपयुक्त बनाता है, जैसे कि कृत्रिम बुद्धिमत्ता, प्रतीकात्मक संगणना और वास्तविक समय मल्टीमीडिया प्रसंस्करण।
शुद्ध प्लग-इन (कंप्यूटिंग) | प्लग-इन ग्नुमेरिक स्प्रेडशीट और मिलर पकेट के शुद्ध डेटा ग्राफिकल मल्टीमीडिया सॉफ़्टवेयर के लिए उपलब्ध हैं, जो शुद्ध भाषा में लिखे गए कार्यों के साथ इन प्रोग्रामों को विस्तारित करना संभव बनाते हैं। जीएनयू ऑक्टेव, ओपनसीवी, ओपनजीएल, जीएनयू वैज्ञानिक लाइब्रेरी, एफएयूएसटी (प्रोग्रामिंग लैंग्वेज), उत्तम टक्कर खानेवाली, और लिब्लो (ध्वनि नियंत्रण खोलें (ओएससी) के लिए) को लाइब्रेरी मॉड्यूल के रूप में इंटरफेस भी प्रदान किए जाते हैं।
उदाहरण
फाइबोनैचि संख्या (भोले संस्करण):
<वाक्यविन्यास प्रकाश लैंग = Q> फाइब 0 = 0; फाइब 1 = 1; फाइब एन = फाइब (एन-2) + फाइब (एन-1) अगर एन> 1; </वाक्यविन्यास हाइलाइट>
बेहतर (पूंछ-पुनरावर्ती और रैखिक-समय) संस्करण:
<वाक्यविन्यास प्रकाश लैंग = Q> तंतु n = तंतु (0,1) n साथ
फाइबर (ए, बी) एन = अगर एन <= 0 तो एक और फाइबर (बी, ए + बी) (एन -1);
अंत; </वाक्यविन्यास हाइलाइट>
पहले 20 फाइबोनैचि संख्याओं की गणना करें:
<वाक्यविन्यास प्रकाश लैंग = Q> मैप फ़ाइब (1..20); </वाक्यविन्यास हाइलाइट>
आठ रानियों की पहेली के लिए एक कलन विधि जो बैकट्रैकिंग खोज को व्यवस्थित करने के लिए एक सूची समझ को नियोजित करता है:
<वाक्यविन्यास प्रकाश लैंग = Q> क्वीन्स एन = सर्च एन 1 [] साथ
खोज एन आई पी = [रिवर्स पी] अगर मैं> एन; = बिल्ली [खोज n (i+1) ((i,j):p) | जे = 1..एन; सुरक्षित (आई, जे) पी]; सुरक्षित (आई, जे) पी = ~ कोई भी (चेक (आई, जे)) पी; चेक (i1,j1) (i2,j2) = i1==i2 || j1==j2 || i1+j1==i2+j2 || i1-j1==i2-j2;
अंत; </वाक्यविन्यास हाइलाइट>
जबकि शुद्ध डिफ़ॉल्ट रूप से उत्सुक मूल्यांकन का उपयोग करता है, यह आलसी मूल्यांकन डेटा संरचनाओं जैसे धाराओं (आलसी सूची (कंप्यूटिंग)) का भी समर्थन करता है। उदाहरण के लिए, डेविड टर्नर (कंप्यूटर वैज्ञानिक) का एल्गोरिदम[1] परीक्षण प्रभाग द्वारा अभाज्य संख्याओं की धारा की गणना के लिए शुद्ध में व्यक्त किया जा सकता है:
<वाक्यविन्यास प्रकाश लैंग = Q> primes = छलनी (2..inf) के साथ
छलनी (p:qs) = p : छलनी [q | क्ष = क्ष; Q मॉड पी] &;
अंत; </वाक्यविन्यास हाइलाइट>
का उपयोग &
ऑपरेटर छलनी की पूंछ को इसकी गणना में देरी करने के लिए एक थंक में बदल देता है। जब सूची के संबंधित भाग तक पहुँचा जाता है, तो थंक का मूल्यांकन निहित रूप से किया जाता है और फिर संस्मरण (आवश्यक मूल्यांकन द्वारा कॉल का उपयोग करके) किया जाता है, उदाहरण के लिए:
<वाक्यविन्यास प्रकाश लैंग = Q> primes!!(0..99); // पहले 100 अभाज्य संख्याएँ प्राप्त करता है </वाक्यविन्यास हाइलाइट>
शुद्ध में वेक्टर और मैट्रिक्स कॉम्प्रिहेंशन सहित वेक्टर और मैट्रिसेस (MATLAB और GNU ऑक्टेव के समान) के लिए कुशल समर्थन है। उदाहरण के लिए, आंशिक पिवोटिंग के साथ एक गाउस विलोपन एल्गोरिथम को शुद्ध में लागू किया जा सकता है:
<वाक्यविन्यास प्रकाश लैंग = Q> गॉस_एलिमिनेशन एक्स :: मैट्रिक्स = पी, एक्स जब एन, एम = मंद एक्स; p,_,x = तह चरण (0..n-1,0,x) (0..m-1) अंत;
चरण (पी, आई, एक्स) जे = अगर max_x==0 तो p,i,x और
// अद्यतन पंक्ति क्रमपरिवर्तन और अनुक्रमणिका: ट्रांसप आई मैक्स_आई पी, आई+1, {// मैट्रिक्स की शीर्ष पंक्तियां अपरिवर्तित रहती हैं: x!!(0..i-1,0..m-1); // धुरी पंक्ति, धुरी तत्व से विभाजित: {x!(i,l)/x!(i,j) | एल=0..एम-1}; // धुरी पंक्ति के उपयुक्त गुणकों को घटाएं:
Template:X!(k,l)-x!(k,j)*x!(i,l)/x!(i,j) कब
एन, एम = मंद एक्स; max_i, max_x = धुरी i (कर्नल एक्स जे); x = if max_x>0 तो x i max_i और x स्वैप करें;
के साथ समाप्त करना
पिवोट आई एक्स = फोल्डल मैक्स (0,0) [जे, एब्स (एक्स! जे) | जे = आई .. # एक्स -1]; अधिकतम (i,x) (j,y) = यदि x<y तो j,y और i,x;
अंत;
/* मैट्रिक्स x की पंक्तियों i और j को स्वैप करें। */
स्वैप x i j = x !! (transp i j (0..n-1), 0..m-1) जब n, m = मंद x अंत;
/* क्रमचय पर स्थानान्तरण लागू करें। */
ट्रांसप आई जे पी = [पी! टीआर के | के=0..#पी-1] टीआर के साथ = अगर के == मैं तो जे और अगर के == जे तो मैं और के अंत;
/* उदाहरण: */
मान लीजिए x = dmatrix {2,1,-1,8; -3,-1,2,-11; -2,1,2,-3}; एक्स; गॉस_एलिमिनेशन एक्स; </वाक्यविन्यास हाइलाइट>
शब्द पुनर्लेखन पर आधारित भाषा के रूप में, शुद्ध अभिव्यक्ति के साथ प्रतीकात्मक संगणना का पूरी तरह से समर्थन करता है। यहाँ एक उदाहरण है जो बहुपद विस्तार और गुणनखंड सरल अंकगणितीय अभिव्यक्तियों के लिए स्थानीय पुनर्लेखन नियमों का उपयोग दिखा रहा है:
<वाक्यविन्यास प्रकाश लैंग = Q> विस्तार = के साथ कम करें
(ए+बी)*सी = ए*सी+बी*सी; ए * (बी + सी) = ए * बी + ए * सी;
अंत;
कारक = के साथ कम करें
ए * सी + बी * सी = (ए + बी) * सी; ए * बी + ए * सी = ए * (बी + सी);
अंत;
विस्तार ((ए + बी) * 2); // पैदावार ए * 2 + बी * 2 कारक (ए * 2 + बी * 2); // पैदावार (ए + बी) * 2 </वाक्यविन्यास हाइलाइट>
Pure से C (प्रोग्रामिंग लैंग्वेज) फंक्शन को कॉल करना बहुत आसान है। उदाहरण के लिए, निम्नलिखित आयात करता है puts
सी लाइब्रेरी से कार्य करता है और स्ट्रिंग को प्रिंट करने के लिए इसका उपयोग करता है "Hello, world!"
टर्मिनल पर:
<वाक्यविन्यास प्रकाश लैंग = सी> बाहरी इंट पुट (चार *); हैलो = हैलो, दुनिया डालता है! ; नमस्ते; </वाक्यविन्यास हाइलाइट>
यह भी देखें
- कार्यात्मक प्रोग्रामिंग
- : श्रेणी: कार्यात्मक भाषाएं
- स्वच्छ (प्रोग्रामिंग भाषा)
संदर्भ
- Albert Gräf. "Signal Processing in the Pure Programming Language". Linux Audio Conference 2009.
- Michael Riepe. "Pure – eine einfache funktionale Sprache". Heise.
- "Interview With Albert Gräf". blueparen.
टिप्पणियाँ
- ↑ Turner, David A. SASL language manual. Tech. rept. CS/75/1. Department of Computational Science, University of St. Andrews 1975.