प्योर (प्रोग्रामिंग लैंग्वेज)
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
(Learn how and when to remove this template message)
|
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 |
शुद्ध, समीकरण भाषा क्यू के उत्तराधिकारी, एक गतिशील रूप से टाइप की गई, कार्यात्मक प्रोग्रामिंग प्रोग्रामिंग भाषा है जो शब्द पुनर्लेखन पर आधारित है। इसमें यूजर-डिफ़ाइंड ऑपरेटर (प्रोग्रामिंग) सिंटैक्स, मैक्रो (कंप्यूटर विज्ञान), मनमाना-परिशुद्धता अंकगणित (बहु-परिशुद्धता संख्या) और एलएलवीएम के माध्यम से देशी कोड के संकलन की सुविधा है। प्योर जीएनयू लेसर जनरल पब्लिक लाइसेंस वर्जन 3 या बाद के संस्करण के तहत वितरित (ज्यादातर) मुफ्त और ओपन-सोर्स सॉफ्टवेयर है।
शुद्ध एक दुभाषिया और डीबगर के साथ आता है, स्वचालित मेमोरी प्रबंधन प्रदान करता है, शक्तिशाली कार्यात्मक और प्रतीकात्मक प्रोग्रामिंग क्षमताएं हैं, और सी (प्रोग्रामिंग भाषा) में पुस्तकालय (कम्प्यूटिंग) के लिए इंटरफेस (उदाहरण के लिए, न्यूमेरिक्स, निम्न-स्तरीय प्रोटोकॉल और ऐसे अन्य कार्यों के लिए) . उसी समय, प्योर एक छोटी भाषा है जिसे शुरुआत से डिजाइन किया गया है; इसका दुभाषिया बड़ा नहीं है, और लाइब्रेरी मॉड्यूल प्योर में लिखे गए हैं। प्योर का सिंटैक्स मिरांडा (प्रोग्रामिंग भाषा) और हास्केल (प्रोग्रामिंग भाषा) से मिलता-जुलता है, लेकिन यह एक मुक्त-प्रारूप भाषा है और इस तरह प्रोग्राम स्ट्रक्चर को निरूपित करने के लिए स्पष्ट सीमांकक (बजाय ऑफ साइड नियम इंडेंट) का उपयोग करता है।
शुद्ध भाषा समतुल्य प्रोग्रामिंग भाषा क्यू का उत्तराधिकारी है, जो पहले जर्मनी के मेनज़ विश्वविद्यालय में एक ही लेखक अल्बर्ट ग्राफ द्वारा बनाई गई थी। क्यू के सापेक्ष, यह कुछ महत्वपूर्ण नई सुविधाएँ प्रदान करता है (जैसे कि लेक्सिकल स्कूपिंग, कुशल वेक्टर और मैट्रिक्स सपोर्ट के साथ स्थानीय फ़ंक्शंस, और बिल्ट-इन सी इंटरफ़ेस) और प्रोग्राम बहुत तेज़ी से चलते हैं क्योंकि वे समय-समय पर संकलन हैं। फ्लाई पर मूल कोड के लिए समय-समय पर। प्योर वर्तमान में ज्यादातर गणितीय अनुप्रयोगों और वैज्ञानिक कंप्यूटिंग के उद्देश्य से है, लेकिन इसका इंटरैक्टिव दुभाषिया वातावरण, सी इंटरफ़ेस और ऐडऑन मॉड्यूल का बढ़ता सेट इसे कई अन्य अनुप्रयोगों के लिए उपयुक्त बनाता है, जैसे कि कृत्रिम बुद्धिमत्ता, प्रतीकात्मक संगणना और वास्तविक समय मल्टीमीडिया प्रसंस्करण।
शुद्ध प्लग-इन (कंप्यूटिंग) | प्लग-इन ग्नुमेरिक स्प्रेडशीट और मिलर पकेट के प्योर डेटा ग्राफिकल मल्टीमीडिया सॉफ़्टवेयर के लिए उपलब्ध हैं, जो शुद्ध भाषा में लिखे गए कार्यों के साथ इन प्रोग्रामों को विस्तारित करना संभव बनाते हैं। जीएनयू ऑक्टेव, ओपनसीवी, ओपनजीएल, जीएनयू वैज्ञानिक पुस्तकालय, एफएयूएसटी (प्रोग्रामिंग लैंग्वेज), उत्तम टक्कर खानेवाली, और लिब्लो (ध्वनि नियंत्रण खोलें (ओएससी) के लिए) को लाइब्रेरी मॉड्यूल के रूप में इंटरफेस भी प्रदान किए जाते हैं।
उदाहरण
फाइबोनैचि संख्या (भोले संस्करण):
<वाक्यविन्यास प्रकाश लैंग = क्यू> फाइब 0 = 0; फाइब 1 = 1; फाइब एन = फाइब (एन-2) + फाइब (एन-1) अगर एन> 1; </वाक्यविन्यास हाइलाइट>
बेहतर (पूंछ-पुनरावर्ती और रैखिक-समय) संस्करण:
<वाक्यविन्यास प्रकाश लैंग = क्यू> तंतु n = तंतु (0,1) n साथ
फाइबर (ए, बी) एन = अगर एन <= 0 तो एक और फाइबर (बी, ए + बी) (एन -1);
अंत; </वाक्यविन्यास हाइलाइट>
पहले 20 फाइबोनैचि संख्याओं की गणना करें:
<वाक्यविन्यास प्रकाश लैंग = क्यू> मैप फ़ाइब (1..20); </वाक्यविन्यास हाइलाइट>
आठ रानियों की पहेली के लिए एक कलन विधि जो बैकट्रैकिंग खोज को व्यवस्थित करने के लिए एक सूची समझ को नियोजित करता है:
<वाक्यविन्यास प्रकाश लैंग = क्यू> क्वीन्स एन = सर्च एन 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] परीक्षण प्रभाग द्वारा अभाज्य संख्याओं की धारा की गणना के लिए शुद्ध में व्यक्त किया जा सकता है:
<वाक्यविन्यास प्रकाश लैंग = क्यू> primes = छलनी (2..inf) के साथ
छलनी (p:qs) = p : छलनी [q | क्ष = क्ष; क्यू मॉड पी] &;
अंत; </वाक्यविन्यास हाइलाइट>
का उपयोग &
ऑपरेटर छलनी की पूंछ को इसकी गणना में देरी करने के लिए एक थंक में बदल देता है। जब सूची के संबंधित भाग तक पहुँचा जाता है, तो थंक का मूल्यांकन निहित रूप से किया जाता है और फिर संस्मरण (आवश्यक मूल्यांकन द्वारा कॉल का उपयोग करके) किया जाता है, उदाहरण के लिए:
<वाक्यविन्यास प्रकाश लैंग = क्यू> primes!!(0..99); // पहले 100 अभाज्य संख्याएँ प्राप्त करता है </वाक्यविन्यास हाइलाइट>
प्योर में वेक्टर और मैट्रिक्स कॉम्प्रिहेंशन सहित वेक्टर और मैट्रिसेस (MATLAB और GNU ऑक्टेव के समान) के लिए कुशल समर्थन है। उदाहरण के लिए, आंशिक पिवोटिंग के साथ एक गाउस विलोपन एल्गोरिथम को प्योर में लागू किया जा सकता है:
<वाक्यविन्यास प्रकाश लैंग = क्यू> गॉस_एलिमिनेशन एक्स :: मैट्रिक्स = पी, एक्स जब एन, एम = मंद एक्स; 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}; एक्स; गॉस_एलिमिनेशन एक्स; </वाक्यविन्यास हाइलाइट>
शब्द पुनर्लेखन पर आधारित भाषा के रूप में, प्योर अभिव्यक्ति के साथ प्रतीकात्मक संगणना का पूरी तरह से समर्थन करता है। यहाँ एक उदाहरण है जो बहुपद विस्तार और गुणनखंड सरल अंकगणितीय अभिव्यक्तियों के लिए स्थानीय पुनर्लेखन नियमों का उपयोग दिखा रहा है:
<वाक्यविन्यास प्रकाश लैंग = क्यू> विस्तार = के साथ कम करें
(ए+बी)*सी = ए*सी+बी*सी; ए * (बी + सी) = ए * बी + ए * सी;
अंत;
कारक = के साथ कम करें
ए * सी + बी * सी = (ए + बी) * सी; ए * बी + ए * सी = ए * (बी + सी);
अंत;
विस्तार ((ए + बी) * 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.