प्योर (प्रोग्रामिंग लैंग्वेज): Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Functional programming language}} {{multiple issues| {{more footnotes|date=September 2016}} {{notability|date=September 2016}} {{primary sources|date=Septe...")
 
(text)
Line 1: Line 1:
{{Short description|Functional programming language}}
{{Short description|Functional programming language}}
{{multiple issues|
{{more footnotes|date=September 2016}}
{{notability|date=September 2016}}
{{primary sources|date=September 2016}}
}}
{{Infobox programming language
{{Infobox programming language
|name = Pure
|name = Pure
Line 23: Line 18:
|website = {{URL|https://agraef.github.io/pure-lang/}}
|website = {{URL|https://agraef.github.io/pure-lang/}}
}}
}}
शुद्ध, समीकरण भाषा क्यू के उत्तराधिकारी, एक गतिशील रूप से टाइप की गई, [[कार्यात्मक प्रोग्रामिंग]] [[प्रोग्रामिंग भाषा]] है जो शब्द पुनर्लेखन पर आधारित है। इसमें यूजर-डिफ़ाइंड [[ऑपरेटर (प्रोग्रामिंग)]] सिंटैक्स, [[मैक्रो (कंप्यूटर विज्ञान)]], मनमाना-परिशुद्धता अंकगणित (बहु-परिशुद्धता संख्या) और [[एलएलवीएम]] के माध्यम से देशी कोड के संकलन की सुविधा है। प्योर [[जीएनयू लेसर जनरल पब्लिक लाइसेंस]] वर्जन 3 या बाद के संस्करण के तहत वितरित (ज्यादातर) मुफ्त और [[ओपन]]-सोर्स सॉफ्टवेयर है।
शुद्ध, समीकरण भाषा '''Q''' के आनुक्रमिक, गतिशील रूप से टाइप की गई, [[कार्यात्मक प्रोग्रामिंग|कार्यात्मक]] [[प्रोग्रामिंग भाषा]] है जो शब्द पुनर्लेखन पर आधारित है। इसमें यूजर-डिफ़ाइंड [[ऑपरेटर (प्रोग्रामिंग)]] सिंटैक्स, [[मैक्रो (कंप्यूटर विज्ञान)]], यादृच्छिक-परिशुद्धता अंकगणित (बहु-परिशुद्धता संख्या) और [[एलएलवीएम]] के माध्यम से प्राकृत कूट के संकलन की सुविधा है। शुद्ध [[जीएनयू लेसर जनरल पब्लिक लाइसेंस]] वर्जन 3 या बाद के संस्करण के तहत वितरित (ज्यादातर) निःशुल्क और मुक्तस्रोत सॉफ्टवेयर है।


शुद्ध एक दुभाषिया और डीबगर के साथ आता है, स्वचालित मेमोरी प्रबंधन प्रदान करता है, शक्तिशाली कार्यात्मक और प्रतीकात्मक प्रोग्रामिंग क्षमताएं हैं, और [[सी (प्रोग्रामिंग भाषा)]] में [[पुस्तकालय (कम्प्यूटिंग)]] के लिए इंटरफेस (उदाहरण के लिए, न्यूमेरिक्स, निम्न-स्तरीय प्रोटोकॉल और ऐसे अन्य कार्यों के लिए) . उसी समय, प्योर एक ''छोटी'' भाषा है जिसे शुरुआत से डिजाइन किया गया है; इसका दुभाषिया बड़ा नहीं है, और लाइब्रेरी मॉड्यूल प्योर में लिखे गए हैं। प्योर का सिंटैक्स [[मिरांडा (प्रोग्रामिंग भाषा)]] और [[हास्केल (प्रोग्रामिंग भाषा)]] से मिलता-जुलता है, लेकिन यह एक [[मुक्त-प्रारूप भाषा]] है और इस तरह प्रोग्राम स्ट्रक्चर को निरूपित करने के लिए स्पष्ट सीमांकक (बजाय [[ऑफ साइड नियम]] इंडेंट) का उपयोग करता है।
शुद्ध दुभाषिया और दोषमार्जक के साथ आता है, यह स्वचालित मेमोरी प्रबंधन प्रदान करता है, और इसमें शक्तिशाली कार्यात्मक और प्रतीकात्मक प्रोग्रामिंग क्षमताएं और [[सी (प्रोग्रामिंग भाषा)|C (प्रोग्रामिंग भाषा)]] में [[पुस्तकालय (कम्प्यूटिंग)|लाइब्रेरी (अभिकलन)]] के लिए इंटरफेस (उदाहरण के लिए, न्यूमेरिक्स, निम्न-स्तरीय प्रोटोकॉल और ऐसे अन्य कार्यों के लिए) हैं। उसी समय, शुद्ध ''छोटी'' भाषा है जिसे प्रारंभिक से डिजाइन किया गया है; इसका दुभाषिया बड़ा नहीं है, और लाइब्रेरी मॉड्यूल शुद्ध में लिखे गए हैं। शुद्ध का सिंटैक्स [[मिरांडा (प्रोग्रामिंग भाषा)]] और [[हास्केल (प्रोग्रामिंग भाषा)]] से मिलता-जुलता है, लेकिन यह [[मुक्त-प्रारूप भाषा]] है और इस तरह प्रोग्राम स्वरूप को निरूपित करने के लिए स्पष्ट सीमांकक (बजाय [[ऑफ साइड नियम]] इंडेंट) का उपयोग करता है।


शुद्ध भाषा समतुल्य प्रोग्रामिंग भाषा क्यू का उत्तराधिकारी है, जो पहले जर्मनी के मेनज़ विश्वविद्यालय में एक ही लेखक अल्बर्ट ग्राफ द्वारा बनाई गई थी। क्यू के सापेक्ष, यह कुछ महत्वपूर्ण नई सुविधाएँ प्रदान करता है (जैसे कि [[लेक्सिकल स्कूपिंग]], कुशल वेक्टर और मैट्रिक्स सपोर्ट के साथ स्थानीय फ़ंक्शंस, और बिल्ट-इन सी इंटरफ़ेस) और प्रोग्राम बहुत तेज़ी से चलते हैं क्योंकि वे [[समय-समय पर संकलन]] हैं। फ्लाई पर मूल कोड के लिए समय-समय पर। प्योर वर्तमान में ज्यादातर गणितीय अनुप्रयोगों और [[वैज्ञानिक कंप्यूटिंग]] के उद्देश्य से है, लेकिन इसका इंटरैक्टिव दुभाषिया वातावरण, सी इंटरफ़ेस और ऐडऑन मॉड्यूल का बढ़ता सेट इसे कई अन्य अनुप्रयोगों के लिए उपयुक्त बनाता है, जैसे कि कृत्रिम बुद्धिमत्ता, प्रतीकात्मक संगणना और वास्तविक समय मल्टीमीडिया प्रसंस्करण।
शुद्ध भाषा समतुल्य प्रोग्रामिंग भाषा Q का आनुक्रमिक है, जो पहले जर्मनी के मेनज़ विश्वविद्यालय में एक ही लेखक अल्बर्ट ग्राफ द्वारा बनाई गई थी। Q के सापेक्ष, यह कुछ महत्वपूर्ण नई सुविधाएँ प्रदान करता है (जैसे कि [[लेक्सिकल स्कूपिंग]], कुशल वेक्टर और मैट्रिक्स सपोर्ट के साथ स्थानीय फ़ंक्शंस, और बिल्ट-इन सी इंटरफ़ेस) और प्रोग्राम बहुत तेज़ी से चलते हैं क्योंकि वे फ्लाई पर मूल कोड के लिए [[समय-समय पर संकलन|जस्ट-इन-टाइम संकलन]] हैं। शुद्ध वर्तमान में ज्यादातर गणितीय अनुप्रयोगों और [[वैज्ञानिक कंप्यूटिंग]] के उद्देश्य से है, लेकिन इसका इंटरैक्टिव दुभाषिया वातावरण, सी इंटरफ़ेस और ऐडऑन मॉड्यूल का बढ़ता सेट इसे कई अन्य अनुप्रयोगों के लिए उपयुक्त बनाता है, जैसे कि कृत्रिम बुद्धिमत्ता, प्रतीकात्मक संगणना और वास्तविक समय मल्टीमीडिया प्रसंस्करण।


शुद्ध [[प्लग-इन (कंप्यूटिंग)]] | प्लग-इन [[ग्नुमेरिक]] स्प्रेडशीट और मिलर पकेट के प्योर डेटा ग्राफिकल मल्टीमीडिया सॉफ़्टवेयर के लिए उपलब्ध हैं, जो शुद्ध भाषा में लिखे गए कार्यों के साथ इन प्रोग्रामों को विस्तारित करना संभव बनाते हैं। [[जीएनयू ऑक्टेव]], [[ओपनसीवी]], ओपनजीएल, [[जीएनयू वैज्ञानिक पुस्तकालय]], एफएयूएसटी (प्रोग्रामिंग लैंग्वेज), [[उत्तम टक्कर खानेवाली]], और लिब्लो ([[ध्वनि नियंत्रण खोलें]] (ओएससी) के लिए) को लाइब्रेरी मॉड्यूल के रूप में इंटरफेस भी प्रदान किए जाते हैं।
शुद्ध [[प्लग-इन (कंप्यूटिंग)]] | प्लग-इन [[ग्नुमेरिक]] स्प्रेडशीट और मिलर पकेट के शुद्ध डेटा ग्राफिकल मल्टीमीडिया सॉफ़्टवेयर के लिए उपलब्ध हैं, जो शुद्ध भाषा में लिखे गए कार्यों के साथ इन प्रोग्रामों को विस्तारित करना संभव बनाते हैं। [[जीएनयू ऑक्टेव]], [[ओपनसीवी]], ओपनजीएल, [[जीएनयू वैज्ञानिक पुस्तकालय|जीएनयू वैज्ञानिक लाइब्रेरी]], एफएयूएसटी (प्रोग्रामिंग लैंग्वेज), [[उत्तम टक्कर खानेवाली]], और लिब्लो ([[ध्वनि नियंत्रण खोलें]] (ओएससी) के लिए) को लाइब्रेरी मॉड्यूल के रूप में इंटरफेस भी प्रदान किए जाते हैं।


== उदाहरण ==
== उदाहरण ==
[[फाइबोनैचि संख्या]] (भोले संस्करण):
[[फाइबोनैचि संख्या]] (भोले संस्करण):


<वाक्यविन्यास प्रकाश लैंग = क्यू>
<वाक्यविन्यास प्रकाश लैंग = Q>
फाइब 0 = 0;
फाइब 0 = 0;
फाइब 1 = 1;
फाइब 1 = 1;
Line 42: Line 37:
बेहतर ([[पूंछ-पुनरावर्ती]] और रैखिक-समय) संस्करण:
बेहतर ([[पूंछ-पुनरावर्ती]] और रैखिक-समय) संस्करण:


<वाक्यविन्यास प्रकाश लैंग = क्यू>
<वाक्यविन्यास प्रकाश लैंग = Q>
तंतु n = तंतु (0,1) n साथ
तंतु n = तंतु (0,1) n साथ
   फाइबर (ए, बी) एन = अगर एन <= 0 तो एक और फाइबर (बी, ए + बी) (एन -1);
   फाइबर (ए, बी) एन = अगर एन <= 0 तो एक और फाइबर (बी, ए + बी) (एन -1);
Line 50: Line 45:
पहले 20 फाइबोनैचि संख्याओं की गणना करें:
पहले 20 फाइबोनैचि संख्याओं की गणना करें:


<वाक्यविन्यास प्रकाश लैंग = क्यू>
<वाक्यविन्यास प्रकाश लैंग = Q>
मैप फ़ाइब (1..20);
मैप फ़ाइब (1..20);
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
Line 56: Line 51:
[[आठ रानियों की पहेली]] के लिए एक [[कलन विधि]] जो बैकट्रैकिंग खोज को व्यवस्थित करने के लिए एक [[सूची समझ]] को नियोजित करता है:
[[आठ रानियों की पहेली]] के लिए एक [[कलन विधि]] जो बैकट्रैकिंग खोज को व्यवस्थित करने के लिए एक [[सूची समझ]] को नियोजित करता है:


<वाक्यविन्यास प्रकाश लैंग = क्यू>
<वाक्यविन्यास प्रकाश लैंग = Q>
क्वीन्स एन = सर्च एन 1 [] साथ
क्वीन्स एन = सर्च एन 1 [] साथ
   खोज एन आई पी = [रिवर्स पी] अगर मैं> एन;
   खोज एन आई पी = [रिवर्स पी] अगर मैं> एन;
Line 68: Line 63:
जबकि शुद्ध डिफ़ॉल्ट रूप से [[उत्सुक मूल्यांकन]] का उपयोग करता है, यह [[आलसी मूल्यांकन]] डेटा संरचनाओं जैसे धाराओं (आलसी [[सूची (कंप्यूटिंग)]]) का भी समर्थन करता है। उदाहरण के लिए, [[डेविड टर्नर (कंप्यूटर वैज्ञानिक)]] का एल्गोरिदम<ref>Turner, David A. SASL language manual. Tech. rept. CS/75/1. Department of Computational Science, University of St. Andrews 1975.</ref> [[परीक्षण प्रभाग]] द्वारा अभाज्य संख्याओं की धारा की गणना के लिए शुद्ध में व्यक्त किया जा सकता है:
जबकि शुद्ध डिफ़ॉल्ट रूप से [[उत्सुक मूल्यांकन]] का उपयोग करता है, यह [[आलसी मूल्यांकन]] डेटा संरचनाओं जैसे धाराओं (आलसी [[सूची (कंप्यूटिंग)]]) का भी समर्थन करता है। उदाहरण के लिए, [[डेविड टर्नर (कंप्यूटर वैज्ञानिक)]] का एल्गोरिदम<ref>Turner, David A. SASL language manual. Tech. rept. CS/75/1. Department of Computational Science, University of St. Andrews 1975.</ref> [[परीक्षण प्रभाग]] द्वारा अभाज्य संख्याओं की धारा की गणना के लिए शुद्ध में व्यक्त किया जा सकता है:


<वाक्यविन्यास प्रकाश लैंग = क्यू>
<वाक्यविन्यास प्रकाश लैंग = Q>
primes = छलनी (2..inf) के साथ
primes = छलनी (2..inf) के साथ
   छलनी (p:qs) = p : छलनी [q | क्ष = क्ष; क्यू मॉड पी] &;
   छलनी (p:qs) = p : छलनी [q | क्ष = क्ष; Q मॉड पी] &;
अंत;
अंत;
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
Line 76: Line 71:
का उपयोग <code>&</code> ऑपरेटर छलनी की पूंछ को इसकी गणना में देरी करने के लिए एक [[थंक]] में बदल देता है। जब सूची के संबंधित भाग तक पहुँचा जाता है, तो थंक का मूल्यांकन निहित रूप से किया जाता है और फिर [[संस्मरण]] (आवश्यक मूल्यांकन द्वारा कॉल का उपयोग करके) किया जाता है, उदाहरण के लिए:
का उपयोग <code>&</code> ऑपरेटर छलनी की पूंछ को इसकी गणना में देरी करने के लिए एक [[थंक]] में बदल देता है। जब सूची के संबंधित भाग तक पहुँचा जाता है, तो थंक का मूल्यांकन निहित रूप से किया जाता है और फिर [[संस्मरण]] (आवश्यक मूल्यांकन द्वारा कॉल का उपयोग करके) किया जाता है, उदाहरण के लिए:


<वाक्यविन्यास प्रकाश लैंग = क्यू>
<वाक्यविन्यास प्रकाश लैंग = Q>
primes!!(0..99); // पहले 100 अभाज्य संख्याएँ प्राप्त करता है
primes!!(0..99); // पहले 100 अभाज्य संख्याएँ प्राप्त करता है
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


प्योर में वेक्टर और मैट्रिक्स कॉम्प्रिहेंशन सहित वेक्टर और मैट्रिसेस ([[MATLAB]] और GNU ऑक्टेव के समान) के लिए कुशल समर्थन है। उदाहरण के लिए, आंशिक पिवोटिंग के साथ एक [[गाउस विलोपन]] एल्गोरिथम को प्योर में लागू किया जा सकता है:
शुद्ध में वेक्टर और मैट्रिक्स कॉम्प्रिहेंशन सहित वेक्टर और मैट्रिसेस ([[MATLAB]] और GNU ऑक्टेव के समान) के लिए कुशल समर्थन है। उदाहरण के लिए, आंशिक पिवोटिंग के साथ एक [[गाउस विलोपन]] एल्गोरिथम को शुद्ध में लागू किया जा सकता है:


<वाक्यविन्यास प्रकाश लैंग = क्यू>
<वाक्यविन्यास प्रकाश लैंग = Q>
गॉस_एलिमिनेशन एक्स :: मैट्रिक्स = पी, एक्स
गॉस_एलिमिनेशन एक्स :: मैट्रिक्स = पी, एक्स
जब एन, एम = मंद एक्स; p,_,x = तह चरण (0..n-1,0,x) (0..m-1) अंत;
जब एन, एम = मंद एक्स; p,_,x = तह चरण (0..n-1,0,x) (0..m-1) अंत;
Line 119: Line 114:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


शब्द पुनर्लेखन पर आधारित भाषा के रूप में, प्योर अभिव्यक्ति के साथ प्रतीकात्मक संगणना का पूरी तरह से समर्थन करता है। यहाँ एक उदाहरण है जो [[बहुपद विस्तार]] और [[गुणन]]खंड सरल अंकगणितीय अभिव्यक्तियों के लिए स्थानीय पुनर्लेखन नियमों का उपयोग दिखा रहा है:
शब्द पुनर्लेखन पर आधारित भाषा के रूप में, शुद्ध अभिव्यक्ति के साथ प्रतीकात्मक संगणना का पूरी तरह से समर्थन करता है। यहाँ एक उदाहरण है जो [[बहुपद विस्तार]] और [[गुणन]]खंड सरल अंकगणितीय अभिव्यक्तियों के लिए स्थानीय पुनर्लेखन नियमों का उपयोग दिखा रहा है:


<वाक्यविन्यास प्रकाश लैंग = क्यू>
<वाक्यविन्यास प्रकाश लैंग = Q>
विस्तार = के साथ कम करें
विस्तार = के साथ कम करें
   (ए+बी)*सी = ए*सी+बी*सी;
   (ए+बी)*सी = ए*सी+बी*सी;
Line 136: Line 131:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


Pure से C (प्रोग्रामिंग लैंग्वेज) फंक्शन को कॉल करना बहुत आसान है। उदाहरण के लिए, निम्नलिखित आयात करता है <code>puts</code> [[सी पुस्तकालय]] से कार्य करता है और स्ट्रिंग को प्रिंट करने के लिए इसका उपयोग करता है <code>"Hello, world!"</code> टर्मिनल पर:
Pure से C (प्रोग्रामिंग लैंग्वेज) फंक्शन को कॉल करना बहुत आसान है। उदाहरण के लिए, निम्नलिखित आयात करता है <code>puts</code> [[सी पुस्तकालय|सी लाइब्रेरी]] से कार्य करता है और स्ट्रिंग को प्रिंट करने के लिए इसका उपयोग करता है <code>"Hello, world!"</code> टर्मिनल पर:


<वाक्यविन्यास प्रकाश लैंग = सी>
<वाक्यविन्यास प्रकाश लैंग = सी>

Revision as of 21:33, 6 March 2023

Pure
File:Pure lang logo.png
ParadigmFunctional, declarative, term rewriting
द्वारा डिज़ाइन किया गयाAlbert Gräf
DeveloperAlbert Gräf
पहली प्रस्तुति2008; 16 years ago (2008)
Stable release
0.68 / 11 April 2018; 6 years ago (2018-04-11)
टाइपिंग अनुशासनStrong, dynamic
ओएसCross-platform: FreeBSD, Linux, macOS, Windows
लाइसेंसGNU Lesser General Public License
वेबसाइटagraef.github.io/pure-lang/
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!" टर्मिनल पर:

<वाक्यविन्यास प्रकाश लैंग = सी> बाहरी इंट पुट (चार *); हैलो = हैलो, दुनिया डालता है! ; नमस्ते; </वाक्यविन्यास हाइलाइट>

यह भी देखें

संदर्भ


टिप्पणियाँ

  1. Turner, David A. SASL language manual. Tech. rept. CS/75/1. Department of Computational Science, University of St. Andrews 1975.


बाहरी संबंध