स्कीम (प्रोग्रामिंग भाषा): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 22: Line 22:
| wikibooks = Scheme
| wikibooks = Scheme
}}
}}
योजना [[प्रोग्रामिंग भाषा]]ओं के [[लिस्प (प्रोग्रामिंग भाषा)]] परिवार की एक [[प्रोग्रामिंग भाषा बोली]] है। स्कीम 1970 के दशक के दौरान [[एमआईटी कंप्यूटर साइंस एंड आर्टिफिशियल इंटेलिजेंस लेबोरेटरी]] में बनाई गई थी और इसके डेवलपर्स गाय एल स्टील और [[गेराल्ड जे सुस्मान]] द्वारा मेमो की एक श्रृंखला के माध्यम से जारी की गई थी, जिसे अब [[लैम्ब्डा पेपर्स]] के रूप में जाना जाता है। यह स्कोप (कंप्यूटर साइंस) # लेक्सिकल स्कोपिंग और डायनेमिक स्कोपिंग चुनने के लिए लिस्प की पहली बोली थी और सबसे पहले [[टेल-कॉल ऑप्टिमाइज़ेशन]] करने के लिए कार्यान्वयन की आवश्यकता थी, जो कार्यात्मक प्रोग्रामिंग और संबंधित तकनीकों जैसे रिकर्सिव एल्गोरिदम के लिए मजबूत समर्थन देती थी। यह [[प्रथम श्रेणी की वस्तु]] | प्रथम श्रेणी की निरंतरता का समर्थन करने वाली पहली प्रोग्रामिंग भाषाओं में से एक थी। [[सामान्य लिस्प]] के विकास के प्रयासों पर इसका महत्वपूर्ण प्रभाव पड़ा।<ref name="cl_steele">कॉमन LISP: द लैंग्वेज, दूसरा संस्करण, गाय एल. स्टील जूनियर डिजिटल प्रेस; 1981.  {{ISBN|978-1-55558-041-4}}. कॉमन लिस्प लिस्प की एक नई बोली है, जो मैकलिस्प की उत्तराधिकारी है, जो ज़ेटालिस्प और कुछ हद तक स्कीम और इंटरलिस्प से प्रभावित है। </रेफरी>
योजना [[प्रोग्रामिंग भाषा|प्रोग्रामिंग भाषाओं]] के [[लिस्प (प्रोग्रामिंग भाषा)]] परिवार की एक [[प्रोग्रामिंग भाषा बोली]] है। योजना 1970 के दशक के समय [[एमआईटी कंप्यूटर साइंस एंड आर्टिफिशियल इंटेलिजेंस लेबोरेटरी]] में बनाई गई थी और इसके डेवलपर्स गाय एल स्टील और [[गेराल्ड जे सुस्मान]] द्वारा मेमो की एक श्रृंखला के माध्यम से जारी की गई थी, जिसे अब [[लैम्ब्डा पेपर्स]] के रूप में जाना जाता है। यह लिस्प की पहली बोली थी जिसने लेक्सिकल स्कोप का चयन किया था और सबसे पहले [[टेल-कॉल ऑप्टिमाइज़ेशन]] करने के लिए कार्यान्वयन की आवश्यकता थी, कार्यात्मक प्रोग्रामिंग और संबंधित विधियों जैसे पुनरावर्ती कलनविधि के लिए ठोस समर्थन दिया। यह [[प्रथम श्रेणी की वस्तु|प्रथम श्रेणी]] की निरंतरता का समर्थन करने वाली पहली प्रोग्रामिंग भाषाओं में से एक थी। [[सामान्य लिस्प]] के विकास के प्रयासों पर इसका महत्वपूर्ण प्रभाव पड़ा। '''यह स्कोप (कंप्यूटर साइंस) # लेक्सिकल स्कोपिंग और डायनेमिक स्कोपिंग चुनने के लिए लिस्प की पहली बोली थी और सबसे पहले करने के लिए कार्यान्वयन की आवश्यकता थी, जो कार्यात्मक प्रोग्रामिंग और संबंधित विधियों जैसे रिकर्सिव कलनविधि के लिए ठोससमर्थन देती थी। यह [[प्रथम श्रेणी की वस्तु]] | प्रथम श्रेणी की निरंतरता का समर्थन करने वाली पहली प्रोग्रामिंग भाषाओं में से एक थी। [[सामान्य लिस्प]] के विकास के प्रयासों पर इसका महत्वपूर्ण प्रभाव पड़ा।'''<ref name="cl_steele">कॉमन LISP: द लैंग्वेज, दूसरा संस्करण, गाय एल. स्टील जूनियर डिजिटल प्रेस; 1981.  {{ISBN|978-1-55558-041-4}}. कॉमन लिस्प लिस्प की एक नई बोली है, जो मैकलिस्प की उत्तराधिकारी है, जो ज़ेटालिस्प और कुछ हद तक स्कीम और इंटरलिस्प से प्रभावित है। </रेफरी>


[[इंस्टीट्यूट ऑफ़ इलेक्ट्रिकल एंड इलेक्ट्रॉनिक्स इंजीनियर्स]] मानक के आधिकारिक संस्थान में मानकीकृत है
[[इंस्टीट्यूट ऑफ़ इलेक्ट्रिकल एंड इलेक्ट्रॉनिक्स इंजीनियर्स]] मानक के आधिकारिक संस्थान में मानकीकृत है
रेफ नाम = ieee1178 >1178-1990 (रीफ 2008) योजना प्रोग्रामिंग भाषा के लिए IEEE मानक। IEEE भाग संख्या STDPD14209, [http://standards.ieee.org/board/rev/308minutes.html सर्वसम्मति से पुन: पुष्टि] IEEE-SA मानक बोर्ड मानक समीक्षा समिति (RevCom) की बैठक में, 26 मार्च, 2008 (आइटम 6.3) मिनट पर), पुन: पुष्टि मिनट अक्टूबर 2009 तक पहुँचा। नोट: यह दस्तावेज़ केवल IEEE से खरीदने के लिए उपलब्ध है और लेखन के समय (2009) ऑनलाइन उपलब्ध नहीं है।</ref> और एक वास्तविक मानक जिसे संशोधित कहा जाता है{{padlsup|n}} एल्गोरिदमिक भाषा योजना (आरएनआरएस) पर रिपोर्ट। एक व्यापक रूप से कार्यान्वित मानक R5RS (1998) है।<ref name="r5rs">{{Cite journal |last=Richard Kelsey |last2=William Clinger |last3=Jonathan Rees |last4=Rozas |first4=G.J. |last5=Adams Iv |first5=N.I. |last6=Friedman |first6=D.P. |last7=Kohlbecker |first7=E. |last8=Steele Jr. |first8=G.L. |last9=Bartley |first9=D.H. |display-authors=3 |date=August 1998 |title=Revised<sup>5</sup> Report on the Algorithmic Language Scheme |url=http://www.schemers.org/Documents/Standards/R5RS/ |journal=Higher-Order and Symbolic Computation |volume=11 |issue=1 |pages=7–105 |doi=10.1023/A:1010051815785 |access-date=2012-08-09 |s2cid=14069423}}</ref> योजना का सबसे हाल ही में स्वीकृत मानक R7RS-छोटा (2013) है।<ref name="r7rs">{{Cite web |date=2013-07-06 |title=R7RS final available |url=http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs.pdf}}</ref> 2007 में अधिक विस्तृत और मॉड्यूलर R6RS की पुष्टि की गई थी।<ref name="r6rs">{{Cite web |last=Sperber |first=Michael |last2=Dybvig |first2=R. Kent |last3=Flatt |first3=Matthew |last4=Van Straaten |first4=Anton |display-authors=etal |date=August 2007 |title=Revised<sup>6</sup> Report on the Algorithmic Language Scheme (R6RS) |url=http://www.r6rs.org |access-date=2011-09-13 |publisher=Scheme Steering Committee}}</ref> दोनों R5RS से अपने वंश का पता लगाते हैं; नीचे दी गई समयरेखा अनुसमर्थन के कालानुक्रमिक क्रम को दर्शाती है।
रेफ नाम = ieee1178 >1178-1990 (रीफ 2008) योजना प्रोग्रामिंग भाषा के लिए IEEE मानक। IEEE भाग संख्या STDPD14209, [http://standards.ieee.org/board/rev/308minutes.html सर्वसम्मति से पुन: पुष्टि] IEEE-SA मानक बोर्ड मानक समीक्षा समिति (RevCom) की बैठक में, 26 मार्च, 2008 (आइटम 6.3) मिनट पर), पुन: पुष्टि मिनट अक्टूबर 2009 तक पहुँचा। नोट: यह दस्तावेज़ केवल IEEE से खरीदने के लिए उपलब्ध है और लेखन के समय (2009) ऑनलाइन उपलब्ध नहीं है।</ref>  
 
योजना की भाषा को आधिकारिक IEEE मानक में मानकीकृत किया गया है और एक वास्तविक मानक जिसे कलनविधि भाषा योजना (आरएनआरएस) पर संशोधित सूची कहा जाता है'''{{padlsup|n}} कलनविधि भाषा योजना (आरएनआरएस) पर सूची'''। एक व्यापक रूप से कार्यान्वित मानक आर5आरएस (1998) है।<ref name="r5rs">{{Cite journal |last=Richard Kelsey |last2=William Clinger |last3=Jonathan Rees |last4=Rozas |first4=G.J. |last5=Adams Iv |first5=N.I. |last6=Friedman |first6=D.P. |last7=Kohlbecker |first7=E. |last8=Steele Jr. |first8=G.L. |last9=Bartley |first9=D.H. |display-authors=3 |date=August 1998 |title=Revised<sup>5</sup> Report on the Algorithmic Language Scheme |url=http://www.schemers.org/Documents/Standards/R5RS/ |journal=Higher-Order and Symbolic Computation |volume=11 |issue=1 |pages=7–105 |doi=10.1023/A:1010051815785 |access-date=2012-08-09 |s2cid=14069423}}</ref> योजना का सबसे हाल ही में स्वीकृत मानक आर7आरएस-छोटा (2013) है।<ref name="r7rs">{{Cite web |date=2013-07-06 |title=R7RS final available |url=http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs.pdf}}</ref> 2007 में अधिक विस्तृत और मॉड्यूलर आर6आरएस की पुष्टि की गई थी।<ref name="r6rs">{{Cite web |last=Sperber |first=Michael |last2=Dybvig |first2=R. Kent |last3=Flatt |first3=Matthew |last4=Van Straaten |first4=Anton |display-authors=etal |date=August 2007 |title=Revised<sup>6</sup> Report on the Algorithmic Language Scheme (R6RS) |url=http://www.r6rs.org |access-date=2011-09-13 |publisher=Scheme Steering Committee}}</ref> दोनों आर5आरएस से अपने वंश का पता लगाते हैं; नीचे दी गई समयरेखा अनुसमर्थन के कालानुक्रमिक क्रम को दर्शाती है।
 




Line 34: Line 37:


=== उत्पत्ति ===
=== उत्पत्ति ===
योजना 1970 के दशक में [[कार्ल हेविट]] के [[अभिनेता मॉडल]] को समझने के प्रयास के रूप में शुरू हुई, जिसके लिए स्टील और सुस्मान ने [[Maclisp]] का उपयोग करके एक छोटा लिस्प दुभाषिया लिखा और फिर अभिनेता बनाने और संदेश भेजने के लिए तंत्र जोड़ा।<ref name="revisited">{{Cite journal |last=Sussman |first=Gerald Jay |last2=Steele |first2=Guy L. |date=1 December 1998 |title=The First Report on Scheme Revisited |journal=Higher-Order and Symbolic Computation |volume=11 |issue=4 |pages=399–404 |doi=10.1023/A:1010079421970 |s2cid=7704398}}</ref> अन्य लिस्प (प्रोग्रामिंग भाषा)-व्युत्पन्न भाषाओं जैसे प्लानर (प्रोग्रामिंग भाषा) या कोनिवर की परंपरा में योजना को मूल रूप से स्कीमर कहा जाता था। वर्तमान नाम लेखकों के [[असंगत टाइमशेयरिंग सिस्टम]] के उपयोग से उत्पन्न हुआ है, जो फ़ाइल नामों को अधिकतम छह वर्णों के दो घटकों तक सीमित करता है। वर्तमान में, स्कीमर का उपयोग आमतौर पर स्कीम प्रोग्रामर को संदर्भित करने के लिए किया जाता है।
योजना 1970 के दशक में [[कार्ल हेविट]] के [[अभिनेता मॉडल]] को समझने के प्रयास के रूप में प्रारंभ हुई, जिसके लिए स्टील और सुस्मान ने [[Maclisp]] का उपयोग करके एक छोटा लिस्प दुभाषिया लिखा और फिर अभिनेता बनाने और संदेश भेजने के लिए तंत्र जोड़ा।<ref name="revisited">{{Cite journal |last=Sussman |first=Gerald Jay |last2=Steele |first2=Guy L. |date=1 December 1998 |title=The First Report on Scheme Revisited |journal=Higher-Order and Symbolic Computation |volume=11 |issue=4 |pages=399–404 |doi=10.1023/A:1010079421970 |s2cid=7704398}}</ref> अन्य लिस्प (प्रोग्रामिंग भाषा)-व्युत्पन्न भाषाओं जैसे प्लानर (प्रोग्रामिंग भाषा) या कोनिवर की परंपरा में योजना को मूल रूप से स्कीमर कहा जाता था। वर्तमान नाम लेखकों के [[असंगत टाइमशेयरिंग सिस्टम]] के उपयोग से उत्पन्न हुआ है, जो फ़ाइल नामों को अधिकतम छह वर्णों के दो घटकों तक सीमित करता है। वर्तमान में, स्कीमर का उपयोग आमतौर पर योजना प्रोग्रामर को संदर्भित करने के लिए किया जाता है।
 
===आर6आरएस===
2006 में एक आर6आरएस मानक तैयार करने के लक्ष्य के साथ, 2003 की योजना कार्यशाला में एक नई भाषा मानकीकरण प्रक्रिया प्रारंभ हुई। यह प्रक्रिया एकमत के पहले के RnRS दृष्टिकोण से अलग हो गई।


===R6RS===
आर6आरएस में एक मानक मॉड्यूल सिस्टम है, जो मूल भाषा और पुस्तकालयों के बीच विभाजन की अनुमति देता है। आर6आरएस विनिर्देशन के कई ड्राफ्ट जारी किए गए, अंतिम संस्करण R5.97RS था। एक सफल वोट के परिणामस्वरूप 28 अगस्त, 2007 को घोषित नए मानक का अनुसमर्थन हुआ।<ref name="r6rs" />
2006 में एक R6RS मानक तैयार करने के लक्ष्य के साथ, 2003 की योजना कार्यशाला में एक नई भाषा मानकीकरण प्रक्रिया शुरू हुई। यह प्रक्रिया एकमत के पहले के RnRS दृष्टिकोण से अलग हो गई।


R6RS में एक मानक मॉड्यूल सिस्टम है, जो मूल भाषा और पुस्तकालयों के बीच विभाजन की अनुमति देता है। R6RS विनिर्देशन के कई ड्राफ्ट जारी किए गए, अंतिम संस्करण R5.97RS था। एक सफल वोट के परिणामस्वरूप 28 अगस्त, 2007 को घोषित नए मानक का अनुसमर्थन हुआ।<ref name="r6rs" />
वर्तमान में विभिन्न योजना कार्यान्वयनों की नवीनतम रिलीज़<ref name="rs6s_Implementations">{{Cite web |title=R6RS कार्यान्वयन|url=http://www.r6rs.org/implementations.html |access-date=2017-11-24 |publisher=r6rs.org}}</ref> आर6आरएस मानक का समर्थन करता है। आर6आरएस के लिए प्रस्तावित निहित रूप से चरणबद्ध पुस्तकालयों का एक पोर्टेबल संदर्भ कार्यान्वयन है, जिसे वाक्य-विन्यास कहा जाता है, जो विभिन्न पुराने योजना कार्यान्वयनों पर खुद को ठीक से लोड और बूटस्ट्रैप करता है। रेफ नाम = वाक्य-विन्यास>{{Cite web |last=Abdulaziz Ghuloum |date=2007-10-27 |title=R6RS लाइब्रेरी और सिंटैक्स-केस सिस्टम (साइंटैक्स)|url=https://www.cs.indiana.edu/~aghuloum/r6rs-libraries/ |access-date=2009-10-20 |publisher=Ikarus Scheme}}</रेफरी>


वर्तमान में विभिन्न योजना कार्यान्वयनों की नवीनतम रिलीज़<ref name="rs6s_Implementations">{{Cite web |title=R6RS कार्यान्वयन|url=http://www.r6rs.org/implementations.html |access-date=2017-11-24 |publisher=r6rs.org}}</ref> R6RS मानक का समर्थन करता है। R6RS के लिए प्रस्तावित निहित रूप से चरणबद्ध पुस्तकालयों का एक पोर्टेबल संदर्भ कार्यान्वयन है, जिसे सिंटैक्स कहा जाता है, जो विभिन्न पुराने योजना कार्यान्वयनों पर खुद को ठीक से लोड और बूटस्ट्रैप करता है। रेफ नाम = सिंटैक्स>{{Cite web |last=Abdulaziz Ghuloum |date=2007-10-27 |title=R6RS लाइब्रेरी और सिंटैक्स-केस सिस्टम (साइंटैक्स)|url=https://www.cs.indiana.edu/~aghuloum/r6rs-libraries/ |access-date=2009-10-20 |publisher=Ikarus Scheme}}</रेफरी>
आर6आरएस की एक विशेषता रिकॉर्ड-टाइप डिस्क्रिप्टर (RTD) है। जब एक आरटीडी बनाया और उपयोग किया जाता है, तो रिकॉर्ड प्रकार का प्रतिनिधित्व मेमोरी लेआउट दिखा सकता है। इसने ऑब्जेक्ट फ़ील्ड बिट मास्क और म्यूटेबल योजना ऑब्जेक्ट फ़ील्ड बिट मास्क की भी गणना की, और कचरा संग्रहकर्ता को यह जानने में मदद की कि आरटीडी में सहेजी गई संपूर्ण फ़ील्ड सूची को ट्रेस किए बिना फ़ील्ड के साथ क्या करना है। आरटीडी उपयोगकर्ताओं को एक नया रिकॉर्ड सिस्टम बनाने के लिए मूल आरटीडी का विस्तार करने की अनुमति देता है।


R6RS की एक विशेषता रिकॉर्ड-टाइप डिस्क्रिप्टर (RTD) है। जब एक आरटीडी बनाया और उपयोग किया जाता है, तो रिकॉर्ड प्रकार का प्रतिनिधित्व मेमोरी लेआउट दिखा सकता है। इसने ऑब्जेक्ट फ़ील्ड बिट मास्क और म्यूटेबल स्कीम ऑब्जेक्ट फ़ील्ड बिट मास्क की भी गणना की, और कचरा संग्रहकर्ता को यह जानने में मदद की कि आरटीडी में सहेजी गई संपूर्ण फ़ील्ड सूची को ट्रेस किए बिना फ़ील्ड के साथ क्या करना है। आरटीडी उपयोगकर्ताओं को एक नया रिकॉर्ड सिस्टम बनाने के लिए मूल आरटीडी का विस्तार करने की अनुमति देता है।
रेफरी>{{Cite journal |last=Keep |first=Andrew W. |last2=Dybvig |first2=R. Kent |date=November 2014 |title=स्कीम रिकॉर्ड प्रकारों का रन-टाइम प्रतिनिधित्व|journal=Journal of Functional Programming |volume=24 |issue=6 |pages=675–716 |doi=10.1017/S0956796814000203 |s2cid=40001845|doi-access=free }}</रेफरी>
रेफरी>{{Cite journal |last=Keep |first=Andrew W. |last2=Dybvig |first2=R. Kent |date=November 2014 |title=स्कीम रिकॉर्ड प्रकारों का रन-टाइम प्रतिनिधित्व|journal=Journal of Functional Programming |volume=24 |issue=6 |pages=675–716 |doi=10.1017/S0956796814000203 |s2cid=40001845|doi-access=free }}</रेफरी>


R6RS भाषा में कई महत्वपूर्ण बदलाव लाता है।<ref name="r6rs_Language_changes">{{Cite web |date=2007-09-26 |title=एल्गोरिद्मिक लैंग्वेज स्कीम पर संशोधित^6 रिपोर्ट, परिशिष्ट ई: भाषा परिवर्तन|url=http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-19.html#node_chap_E |access-date=2009-10-20 |publisher=Scheme Steering Committee}}</ref> स्रोत कोड अब [[यूनिकोड]] में निर्दिष्ट किया गया है, और यूनिकोड वर्णों का एक बड़ा उपसमुच्चय अब स्कीम प्रतीकों और [[पहचानकर्ता]]ओं में दिखाई दे सकता है, और शाब्दिक नियमों में अन्य छोटे बदलाव हैं। चरित्र डेटा अब यूनिकोड में भी निर्दिष्ट है। कई मानक प्रक्रियाओं को नए मानक पुस्तकालयों में स्थानांतरित कर दिया गया है, जो स्वयं मानक का एक बड़ा विस्तार करते हैं, जिसमें ऐसी प्रक्रियाएँ और वाक्यात्मक रूप शामिल हैं जो पहले मानक का हिस्सा नहीं थे। एक नया मॉड्यूल सिस्टम पेश किया गया है, और अपवाद प्रबंधन के लिए सिस्टम अब मानकीकृत हैं। सिंटैक्स-नियमों को एक अधिक अभिव्यंजक सिंटैक्टिक अमूर्त सुविधा (वाक्यविन्यास-केस) के साथ बदल दिया गया है जो मैक्रो विस्तार समय पर सभी योजनाओं के उपयोग की अनुमति देता है। योजना के पूर्ण संख्यात्मक टावर का समर्थन करने के लिए अब अनुपालन कार्यान्वयन की आवश्यकता है, और संख्याओं के शब्दार्थों का विस्तार किया गया है, मुख्य रूप से फ्लोटिंग पॉइंट संख्यात्मक प्रतिनिधित्व के लिए [[IEEE 754-1985]] मानक के समर्थन की दिशा में।
आर6आरएस भाषा में कई महत्वपूर्ण बदलाव लाता है।<ref name="r6rs_Language_changes">{{Cite web |date=2007-09-26 |title=एल्गोरिद्मिक लैंग्वेज स्कीम पर संशोधित^6 रिपोर्ट, परिशिष्ट ई: भाषा परिवर्तन|url=http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-19.html#node_chap_E |access-date=2009-10-20 |publisher=Scheme Steering Committee}}</ref> स्रोत कोड अब [[यूनिकोड]] में निर्दिष्ट किया गया है, और यूनिकोड वर्णों का एक बड़ा उपसमुच्चय अब योजना प्रतीकों और [[पहचानकर्ता]]ओं में दिखाई दे सकता है, और शाब्दिक नियमों में अन्य छोटे बदलाव हैं। चरित्र डेटा अब यूनिकोड में भी निर्दिष्ट है। कई मानक प्रक्रियाओं को नए मानक पुस्तकालयों में स्थानांतरित कर दिया गया है, जो स्वयं मानक का एक बड़ा विस्तार करते हैं, जिसमें ऐसी प्रक्रियाएँ और वाक्यात्मक रूप सम्मिलित हैं जो पहले मानक का हिस्सा नहीं थे। एक नया मॉड्यूल सिस्टम प्रस्तुत किया गया है, और अपवाद प्रबंधन के लिए सिस्टम अब मानकीकृत हैं। वाक्य-विन्यास-नियमों को एक अधिक अभिव्यंजक सिंटैक्टिक अमूर्त सुविधा (वाक्यविन्यास-केस) के साथ बदल दिया गया है जो मैक्रो विस्तार समय पर सभी योजनाओं के उपयोग की अनुमति देता है। योजना के पूर्ण संख्यात्मक टावर का समर्थन करने के लिए अब अनुपालन कार्यान्वयन की आवश्यकता है, और संख्याओं के शब्दार्थों का विस्तार किया गया है, मुख्य रूप से फ्लोटिंग पॉइंट संख्यात्मक प्रतिनिधित्व के लिए [[IEEE 754-1985]] मानक के समर्थन की दिशा में।


===R7RS===
===आर7आरएस===
R6RS मानक विवाद का कारण बना है क्योंकि कुछ इसे अतिसूक्ष्म दर्शन से प्रस्थान के रूप में देखते हैं।<ref name="r6rs_electorate">{{Cite web |year=2007 |title=R6RS मतदाता|url=http://www.r6rs.org/ratification/electorate.html |access-date=2012-08-09 |publisher=Scheme Steering Committee}}</रेफरी><ref name="r6rs_feeley">{{Cite web |last=Marc Feeley (compilation) |date=2007-10-26 |title=R6RS से संबंधित कार्यान्वयनकर्ताओं के इरादे|url=http://lists.r6rs.org/pipermail/r6rs-discuss/2007-October/003351.html |access-date=2012-08-09 |publisher=Scheme Steering Committee, r6rs-discuss mailing list}}</ref> अगस्त 2009 में, योजना संचालन समिति, जो मानकीकरण प्रक्रिया की देखरेख करती है, ने योजना को दो भाषाओं में विभाजित करने की सिफारिश करने की अपनी मंशा की घोषणा की: प्रोग्रामर के लिए एक बड़ी आधुनिक प्रोग्रामिंग भाषा; और एक छोटा संस्करण, बड़े संस्करण का एक उपसमुच्चय शिक्षकों और आकस्मिक कार्यान्वयनकर्ताओं द्वारा प्रशंसा की गई अतिसूक्ष्मवाद को बरकरार रखता है।<ref name="position_paper">{{Cite web |last=Will Clinger, Marc Feeley, Chris Hanson, Jonathan Rees and Olin Shivers |date=2009-08-20 |title=स्थिति विवरण ''(ड्राफ्ट)''|url=http://scheme-reports.org/2009/position-statement.html |access-date=2012-08-09 |publisher=Scheme Steering Committee}}</ref> योजना के इन दो नए संस्करणों पर काम करने के लिए दो कार्यकारी समूह बनाए गए थे। स्कीम रिपोर्ट प्रोसेस साइट में कार्य समूहों के चार्टर्स, सार्वजनिक चर्चाओं और ट्रैकिंग सिस्टम जारी करने के लिंक हैं।
आर6आरएस मानक विवाद का कारण बना है क्योंकि कुछ इसे अतिसूक्ष्म दर्शन से प्रस्थान के रूप में देखते हैं।<ref name="r6rs_electorate">{{Cite web |year=2007 |title=R6RS मतदाता|url=http://www.r6rs.org/ratification/electorate.html |access-date=2012-08-09 |publisher=Scheme Steering Committee}}</रेफरी><nowiki><ref name="r6rs_feeley"></nowiki>{{Cite web |last=Marc Feeley (compilation) |date=2007-10-26 |title=R6RS से संबंधित कार्यान्वयनकर्ताओं के इरादे|url=http://lists.r6rs.org/pipermail/r6rs-discuss/2007-October/003351.html |access-date=2012-08-09 |publisher=Scheme Steering Committee, r6rs-discuss mailing list}}</ref> अगस्त 2009 में, योजना संचालन समिति, जो मानकीकरण प्रक्रिया की देखरेख करती है, ने योजना को दो भाषाओं में विभाजित करने की सिफारिश करने की अपनी मंशा की घोषणा की: प्रोग्रामर के लिए एक बड़ी आधुनिक प्रोग्रामिंग भाषा; और एक छोटा संस्करण, बड़े संस्करण का एक उपसमुच्चय शिक्षकों और आकस्मिक कार्यान्वयनकर्ताओं द्वारा प्रशंसा की गई अतिसूक्ष्मवाद को बरकरार रखता है।<ref name="position_paper">{{Cite web |last=Will Clinger, Marc Feeley, Chris Hanson, Jonathan Rees and Olin Shivers |date=2009-08-20 |title=स्थिति विवरण ''(ड्राफ्ट)''|url=http://scheme-reports.org/2009/position-statement.html |access-date=2012-08-09 |publisher=Scheme Steering Committee}}</ref> योजना के इन दो नए संस्करणों पर काम करने के लिए दो कार्यकारी समूह बनाए गए थे। योजना सूची प्रोसेस साइट में कार्य समूहों के चार्टर्स, सार्वजनिक चर्चाओं और ट्रैकिंग सिस्टम जारी करने के लिंक हैं।


R7RS (छोटी भाषा) का नौवां मसौदा 15 अप्रैल, 2013 को उपलब्ध कराया गया था। रेफरी नाम= r7rs-ड्राफ्ट-9 >{{Cite web |date=2013-04-15 |title=R7RS 9वां ड्राफ्ट उपलब्ध है|url=http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs-draft-9.pdf}}</ref> इस मसौदे की पुष्टि करने वाला एक मत 20 मई 2013 को समाप्त हुआ,<ref name="r7rs_clinger">{{Cite web |last=Will Clinger |date=2013-05-10 |title=मतदान अवधि का विस्तार|url=http://lists.scheme-reports.org/pipermail/scheme-reports/2013-May/003401.html |url-status=dead |archive-url=https://web.archive.org/web/20130721162308/http://lists.scheme-reports.org/pipermail/scheme-reports/2013-May/003401.html# |archive-date=2013-07-21 |access-date=2013-07-07 |publisher=Scheme Language Steering Committee, scheme-reports mailing list}}</रेफरी> और अंतिम रिपोर्ट 6 अगस्त 2013 से उपलब्ध है,<!-- quote= the Scheme Steering Committee decided in August 2009 to divide the standard into two separate but compatible languages – a "small" language, suitable for educators, researchers, and users of embedded languages, focused on R5RS compatibility, and a "large" language focused on the practical needs of mainstream software development, intended to become a replacement for R6RS. The present report --> उस प्रयास की 'छोटी' भाषा का वर्णन: इसलिए इसे अलगाव में R6RS के उत्तराधिकारी के रूप में नहीं माना जा सकता है।
आर7आरएस (छोटी भाषा) का नौवां मसौदा 15 अप्रैल, 2013 को उपलब्ध कराया गया था। रेफरी नाम= आर7आरएस-ड्राफ्ट-9 >{{Cite web |date=2013-04-15 |title=R7RS 9वां ड्राफ्ट उपलब्ध है|url=http://trac.sacrideo.us/wg/raw-attachment/wiki/WikiStart/r7rs-draft-9.pdf}}<nowiki></ref></nowiki> इस मसौदे की पुष्टि करने वाला एक मत 20 मई 2013 को समाप्त हुआ,<ref name="r7rs_clinger">{{Cite web |last=Will Clinger |date=2013-05-10 |title=मतदान अवधि का विस्तार|url=http://lists.scheme-reports.org/pipermail/scheme-reports/2013-May/003401.html |url-status=dead |archive-url=https://web.archive.org/web/20130721162308/http://lists.scheme-reports.org/pipermail/scheme-reports/2013-May/003401.html# |archive-date=2013-07-21 |access-date=2013-07-07 |publisher=Scheme Language Steering Committee, scheme-reports mailing list}}</रेफरी> और अंतिम रिपोर्ट 6 अगस्त 2013 से उपलब्ध है,<!-- quote= the Scheme Steering Committee decided in August 2009 to divide the standard into two separate but compatible languages – a "small" language, suitable for educators, researchers, and users of embedded languages, focused on R5RS compatibility, and a "large" language focused on the practical needs of mainstream software development, intended to become a replacement for R6RS. The present report --> उस प्रयास की 'छोटी' भाषा का वर्णन: इसलिए इसे अलगाव में R6RS के उत्तराधिकारी के रूप में नहीं माना जा सकता है।


{{Lisp}}
{{Lisp}}
Line 91: Line 95:
लिस्प बोली में लेक्सिकल स्कोपिंग को कैसे पेश किया जाए, इस पर प्रमुख अंतर्दृष्टि को सुस्मान और स्टील के 1975 लैम्ब्डा पेपर, स्कीम: एन इंटरप्रेटर फॉर एक्सटेंडेड लैम्ब्डा कैलकुलस में लोकप्रिय बनाया गया था।<nowiki><ref name="lambda_paper_1"></nowiki>{{Cite journal |last=Gerald Jay Sussman |last2=Guy Lewis Steele Jr. |name-list-style=amp |date=December 1975 |title=योजना: विस्तारित लैम्ब्डा कैलकुलस के लिए एक दुभाषिया|url=https://dspace.mit.edu/bitstream/handle/1721.1/5794/AIM-349.pdf |journal=AI Memos |publisher=[[MIT Computer Science and Artificial Intelligence Laboratory|MIT AI Lab]] |volume=AIM-349 |access-date=23 December 2021 |hdl=1721.1/5794}}</ रेफ> जहां उन्होंने क्लोजर (कंप्यूटर विज्ञान) (पृष्ठ 21 पर) की अवधारणा को अपनाया, जिसे 1970 में [[एआई मेमो]] में [[जोएल मूसा]] द्वारा वर्णित किया गया था, जिन्होंने इस विचार को पीटर जे लैंडिन को जिम्मेदार ठहराया था।<!--
लिस्प बोली में लेक्सिकल स्कोपिंग को कैसे पेश किया जाए, इस पर प्रमुख अंतर्दृष्टि को सुस्मान और स्टील के 1975 लैम्ब्डा पेपर, स्कीम: एन इंटरप्रेटर फॉर एक्सटेंडेड लैम्ब्डा कैलकुलस में लोकप्रिय बनाया गया था।<nowiki><ref name="lambda_paper_1"></nowiki>{{Cite journal |last=Gerald Jay Sussman |last2=Guy Lewis Steele Jr. |name-list-style=amp |date=December 1975 |title=योजना: विस्तारित लैम्ब्डा कैलकुलस के लिए एक दुभाषिया|url=https://dspace.mit.edu/bitstream/handle/1721.1/5794/AIM-349.pdf |journal=AI Memos |publisher=[[MIT Computer Science and Artificial Intelligence Laboratory|MIT AI Lab]] |volume=AIM-349 |access-date=23 December 2021 |hdl=1721.1/5794}}</ रेफ> जहां उन्होंने क्लोजर (कंप्यूटर विज्ञान) (पृष्ठ 21 पर) की अवधारणा को अपनाया, जिसे 1970 में [[एआई मेमो]] में [[जोएल मूसा]] द्वारा वर्णित किया गया था, जिन्होंने इस विचार को पीटर जे लैंडिन को जिम्मेदार ठहराया था।<!--
  --><nowiki><ref name="Moses"></nowiki>{{Citation |last=Joel Moses |title=The Function of FUNCTION in LISP, or Why the FUNARG Problem Should Be Called the Environment Problem |date=June 1970 |id=[[AI Memo]] 199 |quote=A useful metaphor for the difference between FUNCTION and QUOTE in LISP is to think of QUOTE as a porous or an open covering of the function since free variables escape to the current environment. FUNCTION acts as a closed or nonporous covering (hence the term "closure" used by Landin). Thus we talk of "open" Lambda expressions (functions in LISP are usually Lambda expressions) and "closed" Lambda expressions. [...] My interest in the environment problem began while Landin, who had a deep understanding of the problem, visited MIT during 1966-67. I then realized the correspondence between the FUNARG lists which are the results of the evaluation of "closed" Lambda expressions in [[LISP 1.5|LISP]] and [[ISWIM]]'s Lambda Closures. |author-link=Joel Moses |hdl=1721.1/5854}}</ref>
  --><nowiki><ref name="Moses"></nowiki>{{Citation |last=Joel Moses |title=The Function of FUNCTION in LISP, or Why the FUNARG Problem Should Be Called the Environment Problem |date=June 1970 |id=[[AI Memo]] 199 |quote=A useful metaphor for the difference between FUNCTION and QUOTE in LISP is to think of QUOTE as a porous or an open covering of the function since free variables escape to the current environment. FUNCTION acts as a closed or nonporous covering (hence the term "closure" used by Landin). Thus we talk of "open" Lambda expressions (functions in LISP are usually Lambda expressions) and "closed" Lambda expressions. [...] My interest in the environment problem began while Landin, who had a deep understanding of the problem, visited MIT during 1966-67. I then realized the correspondence between the FUNARG lists which are the results of the evaluation of "closed" Lambda expressions in [[LISP 1.5|LISP]] and [[ISWIM]]'s Lambda Closures. |author-link=Joel Moses |hdl=1721.1/5854}}</ref>




=== लैम्ब्डा कैलकुस ===
=== लैम्ब्डा कैलकुस ===
{{See also|Lambda calculus}}
{{See also|Lambda calculus}}
[[अलोंजो चर्च]] के गणितीय अंकन, लैम्ब्डा कैलकुस, ने लिस्प के लैम्ब्डा को एक प्रक्रिया शुरू करने के लिए एक कीवर्ड के रूप में उपयोग करने के साथ-साथ लिस्प में उच्च-क्रम के कार्यों के उपयोग से जुड़े कार्यात्मक प्रोग्रामिंग तकनीकों के विकास को प्रभावित करने के लिए प्रेरित किया है। लेकिन शुरुआती लिस्प्स लैम्ब्डा कैलकुस के उपयुक्त अभिव्यक्ति नहीं थे क्योंकि [[मुक्त चर और बाध्य चर]] के उपचार के कारण।<ref name="revisited" />
[[अलोंजो चर्च]] के गणितीय अंकन, लैम्ब्डा कैलकुस, ने लिस्प के लैम्ब्डा को एक प्रक्रिया प्रारंभ करने के लिए एक कीवर्ड के रूप में उपयोग करने के साथ-साथ लिस्प में उच्च-क्रम के कार्यों के उपयोग से जुड़े कार्यात्मक प्रोग्रामिंग विधियों के विकास को प्रभावित करने के लिए प्रेरित किया है। लेकिन प्रारंभिक लिस्प्स लैम्ब्डा कैलकुस के उपयुक्त अभिव्यक्ति नहीं थे क्योंकि [[मुक्त चर और बाध्य चर]] के उपचार के कारण।<ref name="revisited" />


एक औपचारिक लैम्ब्डा प्रणाली में स्वयंसिद्ध और एक पूर्ण गणना नियम होता है। यह गणितीय तर्क और उपकरणों का उपयोग करके विश्लेषण के लिए सहायक है। इस प्रणाली में, गणना को दिशात्मक कटौती के रूप में देखा जा सकता है। लैम्ब्डा कैलकुलस का सिंटैक्स x, y, z, ..., कोष्ठक, रिक्त स्थान, अवधि और प्रतीक λ से पुनरावर्ती अभिव्यक्तियों का अनुसरण करता है।<ref>{{Cite journal |last=van Tonder |first=André |date=1 January 2004 |title=A Lambda Calculus for Quantum Computation |journal=SIAM Journal on Computing |volume=33 |issue=5 |pages=1109–1135 |arxiv=quant-ph/0307150 |doi=10.1137/S0097539703432165 |s2cid=613571}}</ref> लैम्ब्डा गणना के कार्य में शामिल हैं: सबसे पहले, शक्तिशाली गणितीय तर्क के शुरुआती बिंदु के रूप में कार्य करें। दूसरा, यह कार्यान्वयन विवरण पर विचार करने के लिए प्रोग्रामर की आवश्यकता को कम कर सकता है, क्योंकि इसका उपयोग मशीन मूल्यांकन की नकल करने के लिए किया जा सकता है। अंत में, लैम्ब्डा गणना ने एक पर्याप्त मेटा-थ्योरी बनाई।<ref>{{Cite journal |last=Niehren |first=J. |last2=Schwinghammer |first2=J. |last3=Smolka |first3=G. |date=November 2006 |title=A concurrent lambda calculus with futures |url=https://hal.inria.fr/inria-00090434/file/0.pdf |journal=Theoretical Computer Science |volume=364 |issue=3 |pages=338–356 |doi=10.1016/j.tcs.2006.08.016}}</ref>
एक औपचारिक लैम्ब्डा प्रणाली में स्वयंसिद्ध और एक पूर्ण गणना नियम होता है। यह गणितीय तर्क और उपकरणों का उपयोग करके विश्लेषण के लिए सहायक है। इस प्रणाली में, गणना को दिशात्मक कटौती के रूप में देखा जा सकता है। लैम्ब्डा कैलकुलस का वाक्य-विन्यास x, y, z, ..., कोष्ठक, रिक्त स्थान, अवधि और प्रतीक λ से पुनरावर्ती अभिव्यक्तियों का अनुसरण करता है।<ref>{{Cite journal |last=van Tonder |first=André |date=1 January 2004 |title=A Lambda Calculus for Quantum Computation |journal=SIAM Journal on Computing |volume=33 |issue=5 |pages=1109–1135 |arxiv=quant-ph/0307150 |doi=10.1137/S0097539703432165 |s2cid=613571}}</ref> लैम्ब्डा गणना के कार्य में सम्मिलित हैं: सबसे पहले, शक्तिशाली गणितीय तर्क के प्रारंभिक बिंदु के रूप में कार्य करें। दूसरा, यह कार्यान्वयन विवरण पर विचार करने के लिए प्रोग्रामर की आवश्यकता को कम कर सकता है, क्योंकि इसका उपयोग मशीन मूल्यांकन की नकल करने के लिए किया जा सकता है। अंत में, लैम्ब्डा गणना ने एक पर्याप्त मेटा-थ्योरी बनाई।<ref>{{Cite journal |last=Niehren |first=J. |last2=Schwinghammer |first2=J. |last3=Smolka |first3=G. |date=November 2006 |title=A concurrent lambda calculus with futures |url=https://hal.inria.fr/inria-00090434/file/0.pdf |journal=Theoretical Computer Science |volume=364 |issue=3 |pages=338–356 |doi=10.1016/j.tcs.2006.08.016}}</ref>
लेक्सिकल स्कोप की शुरूआत ने लैम्ब्डा नोटेशन के कुछ रूपों और कार्यशील प्रोग्रामिंग भाषा में उनकी व्यावहारिक अभिव्यक्ति के बीच समानता बनाकर समस्या का समाधान किया। सुस्मान और स्टील ने दिखाया कि नई भाषा का उपयोग एल्गोल और [[फोरट्रान]] सहित अन्य प्रोग्रामिंग भाषाओं के सभी अनिवार्य और घोषणात्मक शब्दार्थों को सुरुचिपूर्ण ढंग से प्राप्त करने के लिए किया जा सकता है, और लैम्ब्डा अभिव्यक्तियों का उपयोग करके अन्य लिस्प्स के गतिशील दायरे को सरल प्रक्रिया तात्कालिकता के रूप में नहीं बल्कि नियंत्रण संरचनाओं के रूप में उपयोग किया जा सकता है। और पर्यावरण संशोधक।<ref name="lambda_paper_2">{{Cite journal |last=Gerald Jay Sussman |last2=Guy Lewis Steele Jr. |name-list-style=amp |date=March 1976 |title=लैम्ब्डा: द अल्टीमेट इंपीरेटिव|url=http://library.readscheme.org/page1.html |url-status=dead |format=postscript or PDF |journal=AI Memos |publisher=[[MIT Computer Science and Artificial Intelligence Laboratory|MIT AI Lab]] |volume=AIM-353 |archive-url=https://web.archive.org/web/20160510140804/http://library.readscheme.org/page1.html |archive-date=2016-05-10 |access-date=2012-08-09}}</रेफरी> उन्होंने लैम्ब्डा पेपर्स के पहले में योजना के अपने पहले विवरण के साथ निरंतरता-पासिंग शैली की शुरुआत की, और बाद के पेपरों में, वे लैम्ब्डा कैलकुस के इस व्यावहारिक उपयोग की कच्ची शक्ति का प्रदर्शन करने के लिए आगे बढ़े।


=== ब्लॉक संरचना ===
लेक्सिकल स्कोप की प्रारंभ  ने लैम्ब्डा संकेतन के कुछ रूपों और कार्यशील प्रोग्रामिंग भाषा में उनकी व्यावहारिक अभिव्यक्ति के बीच समानता बनाकर समस्या का समाधान किया। सुस्मान और स्टील ने दिखाया कि नई भाषा का उपयोग एल्गोल और [[फोरट्रान]] सहित अन्य प्रोग्रामिंग भाषाओं के सभी अनिवार्य और घोषणात्मक शब्दार्थों को सुरुचिपूर्ण ढंग से प्राप्त करने के लिए किया जा सकता है, और लैम्ब्डा अभिव्यक्तियों का उपयोग करके अन्य लिस्प्स के गतिशील दायरे को सरल प्रक्रिया तात्कालिकता के रूप में नहीं बल्कि नियंत्रण संरचनाओं के रूप में उपयोग किया जा सकता है। और पर्यावरण संशोधक।<ref name="lambda_paper_2">{{Cite journal |last=Gerald Jay Sussman |last2=Guy Lewis Steele Jr. |name-list-style=amp |date=March 1976 |title=लैम्ब्डा: द अल्टीमेट इंपीरेटिव|url=http://library.readscheme.org/page1.html |url-status=dead |format=postscript or PDF |journal=AI Memos |publisher=[[MIT Computer Science and Artificial Intelligence Laboratory|MIT AI Lab]] |volume=AIM-353 |archive-url=https://web.archive.org/web/20160510140804/http://library.readscheme.org/page1.html |archive-date=2016-05-10 |access-date=2012-08-09}}</रेफरी> उन्होंने लैम्ब्डा पेपर्स के पहले में योजना के अपने पहले विवरण के साथ निरंतरता-पासिंग शैली की शुरुआत की, और बाद के पेपरों में, वे लैम्ब्डा कैलकुस के इस व्यावहारिक उपयोग की कच्ची शक्ति का प्रदर्शन करने के लिए आगे बढ़े।
 
===ब्लॉक संरचना===
योजना अपनी ब्लॉक संरचना को पहले की ब्लॉक संरचित भाषाओं, विशेष रूप से ALGOL से विरासत में लेती है। योजना में, ब्लॉक तीन बाध्यकारी संरचनाओं द्वारा कार्यान्वित किए जाते हैं: चलो अभिव्यक्ति |<code>let</code>, <code>let*</code> और <code>letrec</code>. उदाहरण के लिए, निम्नलिखित निर्माण एक ब्लॉक (प्रोग्रामिंग) बनाता है जिसमें एक प्रतीक कहा जाता है <code>var</code> संख्या 10 के लिए बाध्य है:
योजना अपनी ब्लॉक संरचना को पहले की ब्लॉक संरचित भाषाओं, विशेष रूप से ALGOL से विरासत में लेती है। योजना में, ब्लॉक तीन बाध्यकारी संरचनाओं द्वारा कार्यान्वित किए जाते हैं: चलो अभिव्यक्ति |<code>let</code>, <code>let*</code> और <code>letrec</code>. उदाहरण के लिए, निम्नलिखित निर्माण एक ब्लॉक (प्रोग्रामिंग) बनाता है जिसमें एक प्रतीक कहा जाता है <code>var</code> संख्या 10 के लिए बाध्य है:


<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
(var हंस परिभाषित करें)
(var हंस परिभाषित करें)
;; यहाँ var का कोई भी संदर्भ हंस के लिए बाध्य होगा
;;यहाँ var का कोई भी संदर्भ हंस के लिए बाध्य होगा
(चलो ((वर 10))
(चलो ((वर 10))
   ;; बयान यहाँ जाते हैं। यहां var का कोई भी संदर्भ 10 तक सीमित रहेगा।
   ;; बयान यहाँ जाते हैं। यहां var का कोई भी संदर्भ 10 तक सीमित रहेगा।
   )
   )
;; यहाँ var का कोई भी संदर्भ हंस के लिए बाध्य होगा
;;यहाँ var का कोई भी संदर्भ हंस के लिए बाध्य होगा
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


Line 126: Line 132:


<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
;; जोड़े की सूची के रूप में हॉफस्टैटर के पुरुष और महिला अनुक्रमों की गणना
;;जोड़े की सूची के रूप में हॉफस्टैटर के पुरुष और महिला अनुक्रमों की गणना


(परिभाषित करें (हॉफस्टाटर-नर-मादा एन)
(परिभाषित करें (हॉफस्टाटर-नर-मादा एन)
Line 168: Line 174:
योजना में किसी भी प्रक्रिया की तरह, नामित लेट में बनाई गई प्रक्रिया प्रथम श्रेणी की वस्तु है।
योजना में किसी भी प्रक्रिया की तरह, नामित लेट में बनाई गई प्रक्रिया प्रथम श्रेणी की वस्तु है।


=== उचित पूंछ पुनरावर्तन ===
===उचित पूंछ पुनरावर्तन===
{{Further|Tail recursion}}
{{Further|Tail recursion}}
योजना का एक पुनरावृत्ति निर्माण है, <code>do</code>, लेकिन यह पुनरावृत्ति व्यक्त करने के लिए पूंछ पुनरावृत्ति का उपयोग करने के लिए योजना में अधिक [[प्रोग्रामिंग मुहावरा]] है। टेल कॉल्स को अनुकूलित करने के लिए मानक-अनुरूप योजना कार्यान्वयन की आवश्यकता है ताकि सक्रिय टेल कॉल्स की असीमित संख्या का समर्थन किया जा सके (R5RS सेकंड 3.5)।<ref name="r5rs"/>- एक संपत्ति जिसे योजना रिपोर्ट उचित पूंछ पुनरावर्तन के रूप में वर्णित करती है - इसे योजना प्रोग्रामर के लिए पुनरावर्ती संरचनाओं का उपयोग करके पुनरावृत्त एल्गोरिदम लिखने के लिए सुरक्षित बनाती है, जो कभी-कभी अधिक सहज होती हैं। पूंछ पुनरावर्ती प्रक्रियाएं और नाम <code>let</code>प्रपत्र पूंछ पुनरावर्तन का उपयोग करके पुनरावृत्ति के लिए सहायता प्रदान करता है।
योजना का एक पुनरावृत्ति निर्माण है, <code>do</code>, लेकिन यह पुनरावृत्ति व्यक्त करने के लिए पूंछ पुनरावृत्ति का उपयोग करने के लिए योजना में अधिक [[प्रोग्रामिंग मुहावरा]] है। टेल कॉल्स को अनुकूलित करने के लिए मानक-अनुरूप योजना कार्यान्वयन की आवश्यकता है ताकि सक्रिय टेल कॉल्स की असीमित संख्या का समर्थन किया जा सके (R5RS सेकंड 3.5)।- एक संपत्ति जिसे योजना रिपोर्ट उचित पूंछ पुनरावर्तन के रूप में वर्णित करती है - इसे योजना प्रोग्रामर के लिए पुनरावर्ती संरचनाओं का उपयोग करके पुनरावृत्त एल्गोरिदम लिखने के लिए सुरक्षित बनाती है, जो कभी-कभी अधिक सहज होती हैं। पूंछ पुनरावर्ती प्रक्रियाएं और नाम <code>let</code>प्रपत्र पूंछ पुनरावर्तन का उपयोग करके पुनरावृत्ति के लिए सहायता प्रदान करता है।


<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
;; 0 से 9 तक वर्गों की सूची बनाना:
;;0 से 9 तक वर्गों की सूची बनाना:
;; नोट: लूप बस एक मनमाना प्रतीक है जिसका उपयोग लेबल के रूप में किया जाता है। कोई भी प्रतीक करेगा।
;;नोट:लूप बस एक मनमाना प्रतीक है जिसका उपयोग लेबल के रूप में किया जाता है। कोई भी प्रतीक करेगा।


(परिभाषित करें (वर्गों की सूची n)
(परिभाषित करें (वर्गों की सूची n)
Line 186: Line 192:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


=== प्रथम श्रेणी निरंतरता ===
===प्रथम श्रेणी निरंतरता===
{{Main|Continuation}}
{{Main|Continuation}}
योजना में निरंतरता प्रथम श्रेणी की वस्तुएं हैं। योजना प्रक्रिया प्रदान करती है <code>[[call-with-current-continuation]]</code> (के रूप में भी जाना जाता है <code>call/cc</code>) प्रोग्रामर द्वारा प्रदान की गई प्रक्रिया में औपचारिक तर्क के लिए बाध्य एक बचने की प्रक्रिया के रूप में इसे पैक करके वर्तमान निरंतरता को पकड़ने के लिए। (R5RS सेकंड 6.4)<ref name="r5rs"/>प्रथम श्रेणी की निरंतरता प्रोग्रामर को गैर-स्थानीय नियंत्रण प्रवाह बनाने में सक्षम बनाती है जैसे कि पुनरावृत्तियाँ, कोरटाइन और [[बैक ट्रैकिंग]]।
योजना में निरंतरता प्रथम श्रेणी की वस्तुएं हैं। योजना प्रक्रिया प्रदान करती है <code>[[call-with-current-continuation]]</code> (के रूप में भी जाना जाता है <code>call/cc</code>) प्रोग्रामर द्वारा प्रदान की गई प्रक्रिया में औपचारिक तर्क के लिए बाध्य एक बचने की प्रक्रिया के रूप में इसे पैक करके वर्तमान निरंतरता को पकड़ने के लिए। (R5RS सेकंड 6.4)प्रथम श्रेणी की निरंतरता प्रोग्रामर को गैर-स्थानीय नियंत्रण प्रवाह बनाने में सक्षम बनाती है जैसे कि पुनरावृत्तियाँ, कोरटाइन और [[बैक ट्रैकिंग]]।


अनिवार्य प्रोग्रामिंग भाषाओं में [[वापसी कथन]] के व्यवहार का अनुकरण करने के लिए निरंतरता का उपयोग किया जा सकता है। निम्नलिखित समारोह <code>find-first</code>, दिया गया कार्य <code>func</code> और सूची <code>lst</code>, पहला तत्व लौटाता है <code>x</code> में <code>lst</code> ऐसा है कि <code>(func x)</code> सच हो जाता है।
अनिवार्य प्रोग्रामिंग भाषाओं में [[वापसी कथन]] के व्यवहार का अनुकरण करने के लिए निरंतरता का उपयोग किया जा सकता है। निम्नलिखित समारोह <code>find-first</code>, दिया गया कार्य <code>func</code> और सूची <code>lst</code>, पहला तत्व लौटाता है <code>x</code> में <code>lst</code> ऐसा है कि <code>(func x)</code> सच हो जाता है।
Line 222: Line 228:
-->
-->


===प्रक्रियाओं और चर के लिए साझा नाम स्थान===
कॉमन लिस्प के विपरीत, योजना में सभी डेटा और प्रक्रियाएं एक सामान्य नाम स्थान साझा करती हैं, जबकि कॉमन लिस्प में कॉमन लिस्प#फ़ंक्शन नेमस्पेस एक फ़ंक्शन और एक चर के लिए एक ही नाम को संभव बनाता है, और एक को संदर्भित करने के लिए विशेष संकेतन की आवश्यकता होती है। मूल्य के रूप में कार्य करें। इसे कभी-कभी लिस्प-1 बनाम लिस्प-2 भेद के रूप में जाना जाता है, जो योजना के एकीकृत नामस्थान और कॉमन लिस्प के अलग-अलग नामस्थानों का संदर्भ देता है।<nowiki><ref></nowiki>{{Cite news |last=Gabriel |first=Richard P. |author-link=Richard P. Gabriel |last2=Pitman |first2=Kent |author-link2=Kent Pitman |year=1988 |title=Technical Issues of Separation in Function Cells and Value Cells |volume=1 |pages=81–101 |work=Lisp and Symbolic Computation |issue=1 |publication-date=June 1988 |url=http://www.nhplace.com/kent/Papers/Technical-Issues.html |access-date=2012-08-09 |doi=10.1007/BF01806178}}</ref>


=== प्रक्रियाओं और चर के लिए साझा नाम स्थान ===
योजना में, डेटा को मैनिपुलेट और बाइंड करने के लिए उपयोग किए जाने वाले समान प्रिमिटिव का उपयोग प्रक्रियाओं को बाइंड करने के लिए किया जा सकता है। सामान्य लिस्प के समकक्ष कोई नहीं है <code>defun</code> और <code>#'</code> आदिम।
कॉमन लिस्प के विपरीत, योजना में सभी डेटा और प्रक्रियाएं एक सामान्य नाम स्थान साझा करती हैं, जबकि कॉमन लिस्प में कॉमन लिस्प#फ़ंक्शन नेमस्पेस एक फ़ंक्शन और एक चर के लिए एक ही नाम को संभव बनाता है, और एक को संदर्भित करने के लिए विशेष संकेतन की आवश्यकता होती है। मूल्य के रूप में कार्य करें। इसे कभी-कभी लिस्प-1 बनाम लिस्प-2 भेद के रूप में जाना जाता है, जो योजना के एकीकृत नामस्थान और कॉमन लिस्प के अलग-अलग नामस्थानों का संदर्भ देता है।<ref>{{Cite news |last=Gabriel |first=Richard P. |author-link=Richard P. Gabriel |last2=Pitman |first2=Kent |author-link2=Kent Pitman |year=1988 |title=Technical Issues of Separation in Function Cells and Value Cells |volume=1 |pages=81–101 |work=Lisp and Symbolic Computation |issue=1 |publication-date=June 1988 |url=http://www.nhplace.com/kent/Papers/Technical-Issues.html |access-date=2012-08-09 |doi=10.1007/BF01806178}}</ref>
स्कीम में, डेटा को मैनिपुलेट और बाइंड करने के लिए उपयोग किए जाने वाले समान प्रिमिटिव का उपयोग प्रक्रियाओं को बाइंड करने के लिए किया जा सकता है। सामान्य लिस्प के समकक्ष कोई नहीं है <code>defun</code> और <code>#'</code> आदिम।


<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
Line 245: Line 251:
===> 13
===> 13
;; कार्यात्मक प्रोग्रामिंग:
;; कार्यात्मक प्रोग्रामिंग:
(लागू करें + '(1 2 3 4 5 6))
(प्रयुक्त करें + '(1 2 3 4 5 6))
===> 21
===> 21
(सेट! एफ (लैम्ब्डा (एन) (+ एन 100)))
(सेट! एफ (लैम्ब्डा (एन) (+ एन 100)))
Line 257: Line 263:
=== संख्यात्मक टावर ===
=== संख्यात्मक टावर ===
{{Main|Numerical tower}}
{{Main|Numerical tower}}
योजना [[जटिल संख्या]] और परिमेय संख्या प्रकारों सहित संख्यात्मक डेटा प्रकारों के तुलनात्मक रूप से पूर्ण सेट को निर्दिष्ट करती है, जिसे योजना में संख्यात्मक टॉवर (R5RS सेकंड 6.2) के रूप में जाना जाता है।<ref name="r5rs"/>). मानक इन्हें सार के रूप में मानता है, और कार्यान्वयनकर्ता को किसी विशेष आंतरिक अभ्यावेदन के लिए प्रतिबद्ध नहीं करता है।
योजना [[जटिल संख्या]] और परिमेय संख्या प्रकारों सहित संख्यात्मक डेटा प्रकारों के तुलनात्मक रूप से पूर्ण सेट को निर्दिष्ट करती है, जिसे योजना में संख्यात्मक टॉवर (आर5आरएस सेकंड 6.2) के रूप में जाना जाता है।<ref name="r5rs"/>). मानक इन्हें सार के रूप में मानता है, और कार्यान्वयनकर्ता को किसी विशेष आंतरिक अभ्यावेदन के लिए प्रतिबद्ध नहीं करता है।


संख्याओं में सटीकता का गुण हो सकता है। एक सटीक संख्या केवल सटीक संचालन के अनुक्रम द्वारा उत्पादित की जा सकती है जिसमें अन्य सटीक संख्याएं शामिल हैं- इस प्रकार अक्षमता संक्रामक है। मानक निर्दिष्ट करता है कि किन्हीं भी दो कार्यान्वयनों को सभी परिचालनों के लिए समान परिणाम उत्पन्न करना चाहिए जिसके परिणामस्वरूप सटीक संख्याएँ होती हैं।
संख्याओं में स्पष्टता का गुण हो सकता है। एक स्पष्ट संख्या केवल स्पष्ट संचालन के अनुक्रम द्वारा उत्पादित की जा सकती है जिसमें अन्य स्पष्ट संख्याएं सम्मिलित हैं- इस प्रकार अक्षमता संक्रामक है। मानक निर्दिष्ट करता है कि किन्हीं भी दो कार्यान्वयनों को सभी परिचालनों के लिए समान परिणाम उत्पन्न करना चाहिए जिसके परिणामस्वरूप स्पष्ट संख्याएँ होती हैं।


R5RS मानक प्रक्रियाओं को निर्दिष्ट करता है <code>exact->inexact</code> और <code>inexact->exact</code> जिसका उपयोग किसी संख्या की सटीकता को बदलने के लिए किया जा सकता है।  <code>inexact->exact</code> सटीक संख्या उत्पन्न करता है जो तर्क के संख्यात्मक रूप से निकटतम है। <code>exact->inexact</code> वह अचूक संख्या उत्पन्न करता है जो संख्यात्मक रूप से तर्क के निकटतम है। R6RS मानक इन प्रक्रियाओं को मुख्य रिपोर्ट से हटा देता है, लेकिन उन्हें मानक पुस्तकालय (rnrs r5rs (6)) में R5RS संगतता प्रक्रियाओं के रूप में निर्दिष्ट करता है।
आर5आरएस मानक प्रक्रियाओं को निर्दिष्ट करता है <code>exact->inexact</code> और <code>inexact->exact</code> जिसका उपयोग किसी संख्या की स्पष्टता को बदलने के लिए किया जा सकता है।  <code>inexact->exact</code> स्पष्ट संख्या उत्पन्न करता है जो तर्क के संख्यात्मक रूप से निकटतम है। <code>exact->inexact</code> वह अचूक संख्या उत्पन्न करता है जो संख्यात्मक रूप से तर्क के निकटतम है। आर6आरएस मानक इन प्रक्रियाओं को मुख्य सूची से हटा देता है, लेकिन उन्हें मानक पुस्तकालय (rnrs आर5आरएस (6)) में आर5आरएस संगतता प्रक्रियाओं के रूप में निर्दिष्ट करता है।


R5RS मानक में, पूरे संख्यात्मक टॉवर को लागू करने के लिए योजना कार्यान्वयन की आवश्यकता नहीं है, लेकिन उन्हें कार्यान्वयन के उद्देश्यों और योजना की भाषा (R5RS सेकंड 6.2.3) की भावना दोनों के अनुरूप एक सुसंगत सबसेट लागू करना होगा।<ref name="r5rs"/>  नए R6RS मानक को पूरे टॉवर के कार्यान्वयन की आवश्यकता होती है, और व्यावहारिक रूप से असीमित आकार और परिशुद्धता के सटीक पूर्णांक ऑब्जेक्ट्स और सटीक परिमेय संख्या ऑब्जेक्ट्स, और कुछ प्रक्रियाओं को लागू करने के लिए ... इसलिए सटीक तर्क दिए जाने पर वे हमेशा सटीक परिणाम देते हैं (R6RS सेकंड। 3.4, धारा 11.7.1)।<ref name="r6rs"/>
आर5आरएस मानक में, पूरे संख्यात्मक टॉवर को प्रयुक्त करने के लिए योजना कार्यान्वयन की आवश्यकता नहीं है, लेकिन उन्हें कार्यान्वयन के उद्देश्यों और योजना की भाषा (आर5आरएस सेकंड 6.2.3) की भावना दोनों के अनुरूप एक सुसंगत सबसेट प्रयुक्त करना होगा।<ref name="r5rs"/>  नए आर6आरएस मानक को पूरे टॉवर के कार्यान्वयन की आवश्यकता होती है, और व्यावहारिक रूप से असीमित आकार और परिशुद्धता के स्पष्ट पूर्णांक ऑब्जेक्ट्स और स्पष्ट परिमेय संख्या ऑब्जेक्ट्स, और कुछ प्रक्रियाओं को प्रयुक्त करने के लिए ... इसलिए स्पष्ट तर्क दिए जाने पर वे हमेशा स्पष्ट परिणाम देते हैं (आर6आरएस सेकंड। 3.4, धारा 11.7.1)।<ref name="r6rs"/>


उदाहरण 1: कार्यान्वयन में सटीक अंकगणित जो सटीक समर्थन करता है
उदाहरण 1: कार्यान्वयन में स्पष्ट अंकगणित जो स्पष्ट समर्थन करता है
तर्कसंगत जटिल संख्या।
तर्कसंगत जटिल संख्या।
<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
Line 272: Line 278:
एक्स
एक्स
===> 509/60+1/3i
===> 509/60+1/3i
;; सटीकता की जाँच करें।
;; स्पष्टता की जाँच करें।
(सटीक? एक्स)
(स्पष्ट? एक्स)
 
===> #टी
===> #टी
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


उदाहरण 2: कार्यान्वयन में वही अंकगणित जो न तो सटीक समर्थन करता है
उदाहरण 2: कार्यान्वयन में वही अंकगणित जो न तो स्पष्ट समर्थन करता है
परिमेय संख्याएँ और न ही सम्मिश्र संख्याएँ लेकिन परिमेय संकेतन में वास्तविक संख्याएँ स्वीकार करती हैं।
परिमेय संख्याएँ और न ही सम्मिश्र संख्याएँ लेकिन परिमेय संकेतन में वास्तविक संख्याएँ स्वीकार करती हैं।
<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
;; चार परिमेय वास्तविक संख्याओं का योग
;; चार परिमेय वास्तविक संख्याओं का योग
Line 284: Line 293:
;; दो परिमेय वास्तविक संख्याओं का योग
;; दो परिमेय वास्तविक संख्याओं का योग
(xi परिभाषित करें (+ -1/3 2/3))
(xi परिभाषित करें (+ -1/3 2/3))
एक्सआर
एक्सआर
===> 8.48333333333333
===> 8.48333333333333
क्सी
क्सी
===> 0.333333333333333
===> 0.333333333333333
;; सटीकता की जाँच करें।
;; स्पष्टता की जाँच करें।
(सटीक? एक्सआर)
(स्पष्ट? एक्सआर)
===> #एफ
===> #एफ
(सटीक? ग्यारहवीं)
(स्पष्ट? ग्यारहवीं)
 
===> #एफ
===> #एफ
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


दोनों कार्यान्वयन R5RS मानक के अनुरूप हैं लेकिन दूसरा R6RS के अनुरूप नहीं है क्योंकि यह पूर्ण संख्यात्मक टावर को लागू नहीं करता है।
दोनों कार्यान्वयन आर5आरएस मानक के अनुरूप हैं लेकिन दूसरा आर6आरएस के अनुरूप नहीं है क्योंकि यह पूर्ण संख्यात्मक टावर को प्रयुक्त नहीं करता है।


=== विलंबित मूल्यांकन ===
=== विलंबित मूल्यांकन ===
{{See also|Lazy evaluation}}
{{See also|सुस्त मूल्यांकन}}
योजना के माध्यम से विलंबित मूल्यांकन का समर्थन करता है <code>delay</code> प्रपत्र और प्रक्रिया <code>force</code>.
योजना के माध्यम से विलंबित मूल्यांकन का समर्थन करता है <code>delay</code> प्रपत्र और प्रक्रिया <code>force</code>.


Line 316: Line 331:
वादे की मूल परिभाषा का शाब्दिक संदर्भ संरक्षित है, और इसका मूल्य पहले उपयोग के बाद भी संरक्षित है <code>force</code>. वादा केवल एक बार मूल्यांकन किया जाता है।
वादे की मूल परिभाषा का शाब्दिक संदर्भ संरक्षित है, और इसका मूल्य पहले उपयोग के बाद भी संरक्षित है <code>force</code>. वादा केवल एक बार मूल्यांकन किया जाता है।


ये प्रिमिटिव, जो फ़्यूचर्स और वादों के रूप में जाने जाने वाले मूल्यों का उत्पादन या संचालन करते हैं, का उपयोग उन्नत [[आलसी मूल्यांकन]] निर्माणों जैसे [[स्ट्रीम (कंप्यूटिंग)]] को लागू करने के लिए किया जा सकता है।<ref name="srfi-41">{{Cite web |last=Philip L. Bewig |date=2008-01-24 |title=SRFI 41: Streams |url=http://srfi.schemers.org/srfi-41/srfi-41.html |access-date=2012-08-09 |publisher=The SRFI Editors, schemers.org}}</ref>
ये प्रिमिटिव, जो फ़्यूचर्स और वादों के रूप में जाने जाने वाले मूल्यों का उत्पादन या संचालन करते हैं, का उपयोग उन्नत [[आलसी मूल्यांकन]] निर्माणों जैसे [[स्ट्रीम (कंप्यूटिंग)]] को प्रयुक्त करने के लिए किया जा सकता है।<ref name="srfi-41">{{Cite web |last=Philip L. Bewig |date=2008-01-24 |title=SRFI 41: Streams |url=http://srfi.schemers.org/srfi-41/srfi-41.html |access-date=2012-08-09 |publisher=The SRFI Editors, schemers.org}}</ref>
R6RS मानक में, ये अब आदिम नहीं हैं, बल्कि इसके बजाय, R5RS संगतता लाइब्रेरी (rnrs r5rs (6)) के हिस्से के रूप में प्रदान किए जाते हैं।


R5RS में, के कार्यान्वयन का सुझाव दिया <code>delay</code> और <code>force</code> दिया गया है, वादे को बिना किसी तर्क (एक [[थंक]]) के एक प्रक्रिया के रूप में लागू करना और यह सुनिश्चित करने के लिए [[memoization]] का उपयोग करना कि यह केवल एक बार मूल्यांकन किया जाता है, चाहे कितनी भी बार <code>force</code> कहा जाता है (R5RS सेकंड। 6.4)।<ref name="r5rs"/>
आर6आरएस मानक में, ये अब आदिम नहीं हैं, बल्कि इसके अतिरिक्त, आर5आरएस संगतता लाइब्रेरी (rnrs आर5आरएस (6)) के हिस्से के रूप में प्रदान किए जाते हैं।


SRFI 41 असाधारण अर्थव्यवस्था के साथ परिमित और अनंत दोनों अनुक्रमों की अभिव्यक्ति को सक्षम बनाता है। उदाहरण के लिए, यह SRFI 41 में परिभाषित कार्यों का उपयोग करके [[फाइबोनैचि संख्या]] की परिभाषा है:<ref name="srfi-41" />
आर5आरएस में, के कार्यान्वयन का सुझाव दिया <code>delay</code> और <code>force</code> दिया गया है, वादे को बिना किसी तर्क (एक [[थंक]]) के एक प्रक्रिया के रूप में प्रयुक्त करना और यह सुनिश्चित करने के लिए [[memoization]] का उपयोग करना कि यह केवल एक बार मूल्यांकन किया जाता है, चाहे कितनी भी बार <code>force</code> कहा जाता है (आर5आरएस सेकंड। 6.4)।<ref name="r5rs" />
 
एसआरएफआई 41 असाधारण अर्थव्यवस्था के साथ परिमित और अनंत दोनों अनुक्रमों की अभिव्यक्ति को सक्षम बनाता है। उदाहरण के लिए, यह एसआरएफआई 41 में परिभाषित कार्यों का उपयोग करके [[फाइबोनैचि संख्या]] की परिभाषा है:<ref name="srfi-41" />


<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
Line 337: Line 353:


=== प्रक्रिया तर्कों के मूल्यांकन का क्रम ===
=== प्रक्रिया तर्कों के मूल्यांकन का क्रम ===
अधिकांश लिस्प्स प्रक्रिया तर्कों के मूल्यांकन के क्रम को निर्दिष्ट करते हैं। योजना नहीं है। मूल्यांकन का क्रम - जिसमें ऑपरेटर की स्थिति में अभिव्यक्ति का मूल्यांकन किया जाता है - कॉल-बाय-कॉल के आधार पर एक कार्यान्वयन द्वारा चुना जा सकता है, और एकमात्र बाधा यह है कि ऑपरेटर और ऑपरेंड के समवर्ती मूल्यांकन का प्रभाव अभिव्यक्ति मूल्यांकन के कुछ अनुक्रमिक क्रम के अनुरूप होने के लिए विवश है। (R5RS सेकंड। 4.1.3)<ref name="r5rs"/><वाक्यविन्यास लैंग = योजना>
अधिकांश लिस्प्स प्रक्रिया तर्कों के मूल्यांकन के क्रम को निर्दिष्ट करते हैं। योजना नहीं है। मूल्यांकन का क्रम - जिसमें ऑपरेटर की स्थिति में अभिव्यक्ति का मूल्यांकन किया जाता है - कॉल-बाय-कॉल के आधार पर एक कार्यान्वयन द्वारा चुना जा सकता है, और एकमात्र बाधा यह है कि ऑपरेटर और ऑपरेंड के समवर्ती मूल्यांकन का प्रभाव अभिव्यक्ति मूल्यांकन के कुछ अनुक्रमिक क्रम के अनुरूप होने के लिए विवश है। (आर5आरएस सेकंड। 4.1.3)<ref name="r5rs"/><वाक्यविन्यास लैंग = योजना>
(चलो ((ईवी (लैम्ब्डा (एन)) (मूल्यांकन प्रदर्शित करें)
(चलो ((ईवी (लैम्ब्डा (एन)) (मूल्यांकन प्रदर्शित करें)
                     (प्रदर्शन (यदि (प्रक्रिया? एन) प्रक्रिया एन))
                     (प्रदर्शन (यदि (प्रक्रिया? एन) प्रक्रिया एन))
Line 355: Line 371:
=== स्वच्छ मैक्रोज़ ===
=== स्वच्छ मैक्रोज़ ===
{{Main|Hygienic macro}}
{{Main|Hygienic macro}}
R5RS मानक में और बाद की रिपोर्ट में भी, योजना के सिंटैक्स को मैक्रो सिस्टम के माध्यम से आसानी से बढ़ाया जा सकता है। R5RS मानक ने एक शक्तिशाली हाइजीनिक मैक्रो सिस्टम पेश किया जो प्रोग्रामर को एक सरल [[पैटर्न मिलान]] उपभाषा (R5RS sec 4.3) का उपयोग करके भाषा में नए वाक्यात्मक निर्माण जोड़ने की अनुमति देता है।<ref name="r5rs"/>  इससे पहले, हाइजीनिक मैक्रो सिस्टम को R4RS मानक के परिशिष्ट के रूप में निम्न स्तर मैक्रो सिस्टम के साथ एक उच्च स्तरीय सिस्टम के रूप में हटा दिया गया था, दोनों को भाषा के एक अनिवार्य भाग के बजाय योजना के विस्तार के रूप में माना जाता था।<ref name="r4rs">{{Cite journal |year=1991 |title=Revised<sup>4</sup> Report on the Algorithmic Language Scheme |url=http://www.cs.indiana.edu/scheme-repository/R4RS/r4rs_toc.html |journal=ACM Lisp Pointers |volume=4 |issue=3 |pages=1–55 |access-date=2012-08-09 |editor=William Clinger and Jonathan Rees}}</ref>
आर5आरएस मानक में और बाद की सूची में भी, योजना के वाक्य-विन्यास को मैक्रो सिस्टम के माध्यम से सरलता से बढ़ाया जा सकता है। आर5आरएस मानक ने एक शक्तिशाली हाइजीनिक मैक्रो सिस्टम प्रस्तुत किया जो प्रोग्रामर को एक सरल [[पैटर्न मिलान]] उपभाषा (आर5आरएस sec 4.3) का उपयोग करके भाषा में नए वाक्यात्मक निर्माण जोड़ने की अनुमति देता है।<ref name="r5rs"/>  इससे पहले, हाइजीनिक मैक्रो सिस्टम को R4RS मानक के परिशिष्ट के रूप में निम्न स्तर मैक्रो सिस्टम के साथ एक उच्च स्तरीय सिस्टम के रूप में हटा दिया गया था, दोनों को भाषा के एक अनिवार्य भाग के अतिरिक्त योजना के विस्तार के रूप में माना जाता था।<ref name="r4rs">{{Cite journal |year=1991 |title=Revised<sup>4</sup> Report on the Algorithmic Language Scheme |url=http://www.cs.indiana.edu/scheme-repository/R4RS/r4rs_toc.html |journal=ACM Lisp Pointers |volume=4 |issue=3 |pages=1–55 |access-date=2012-08-09 |editor=William Clinger and Jonathan Rees}}</ref>
हाइजेनिक मैक्रो सिस्टम के कार्यान्वयन को भी कहा जाता है <code>syntax-rules</code>, शेष भाषा के शाब्दिक दायरे का सम्मान करना आवश्यक है। मैक्रो विस्तार के लिए विशेष नामकरण और स्कोपिंग नियमों द्वारा यह आश्वासन दिया गया है और सामान्य प्रोग्रामिंग त्रुटियों से बचा जाता है जो अन्य प्रोग्रामिंग भाषाओं के मैक्रो सिस्टम में हो सकती हैं। R6RS एक अधिक परिष्कृत परिवर्तन प्रणाली निर्दिष्ट करता है, <code>syntax-case</code>, जो कुछ समय के लिए R5RS योजना के भाषा विस्तार के रूप में उपलब्ध है।
हाइजेनिक मैक्रो सिस्टम के कार्यान्वयन को भी कहा जाता है <code>syntax-rules</code>, शेष भाषा के शाब्दिक दायरे का सम्मान करना आवश्यक है। मैक्रो विस्तार के लिए विशेष नामकरण और स्कोपिंग नियमों द्वारा यह आश्वासन दिया गया है और सामान्य प्रोग्रामिंग त्रुटियों से बचा जाता है जो अन्य प्रोग्रामिंग भाषाओं के मैक्रो सिस्टम में हो सकती हैं। आर6आरएस एक अधिक परिष्कृत परिवर्तन प्रणाली निर्दिष्ट करता है, <code>syntax-case</code>, जो कुछ समय के लिए आर5आरएस योजना के भाषा विस्तार के रूप में उपलब्ध है।


<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
;; बहु-अभिव्यक्ति वाले if के भिन्नरूप को लागू करने के लिए मैक्रो को परिभाषित करें
;; बहु-अभिव्यक्ति वाले if के भिन्नरूप को प्रयुक्त करने के लिए मैक्रो को परिभाषित करें
;; सच्ची शाखा और कोई झूठी शाखा नहीं।
;; सच्ची शाखा और कोई झूठी शाखा नहीं।
(परिभाषित-वाक्यविन्यास कब
(परिभाषित-वाक्यविन्यास कब
   (वाक्यविन्यास-नियम ()
   (वाक्यविन्यास-नियम ()
     ((जब पूर्व ऍक्स्प ऍक्स्प ...)
     ((जब पूर्व ऍक्स्प ऍक्स्प ...)
       (अगर पूर्व (शुरू ऍक्स्प ऍक्स्प्स ...)))))
       (अगर पूर्व (प्रारंभ ऍक्स्प ऍक्स्प्स ...)))))
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


Line 375: Line 391:


=== पर्यावरण और eval ===
=== पर्यावरण और eval ===
R5RS से पहले, योजना का कोई मानक समकक्ष नहीं था <code>eval</code> प्रक्रिया जो अन्य लिस्प्स में सर्वव्यापी है, हालांकि पहले लैम्ब्डा पेपर ने वर्णित किया था <code>evaluate</code> LISP फ़ंक्शन EVAL के समान<ref name="lambda_paper_1" />और 1978 में पहली संशोधित रिपोर्ट ने इसे बदल दिया <code>enclose</code>, जिसने दो तर्क लिए। दूसरी, तीसरी और चौथी संशोधित रिपोर्ट में किसी भी समकक्ष को छोड़ दिया गया <code>eval</code>.
आर5आरएस से पहले, योजना का कोई मानक समकक्ष नहीं था <code>eval</code> प्रक्रिया जो अन्य लिस्प्स में सर्वव्यापी है, हालांकि पहले लैम्ब्डा पेपर ने वर्णित किया था <code>evaluate</code> LISP फ़ंक्शन EVAL के समान<ref name="lambda_paper_1" />और 1978 में पहली संशोधित सूची ने इसे बदल दिया <code>enclose</code>, जिसने दो तर्क लिए। दूसरी, तीसरी और चौथी संशोधित सूची में किसी भी समकक्ष को छोड़ दिया गया <code>eval</code>.


इस भ्रम का कारण यह है कि योजना में इसके शाब्दिक दायरे के साथ एक अभिव्यक्ति का मूल्यांकन करने का परिणाम इस बात पर निर्भर करता है कि इसका मूल्यांकन कहाँ किया जाता है। उदाहरण के लिए, यह स्पष्ट नहीं है कि निम्नलिखित अभिव्यक्ति का मूल्यांकन करने का परिणाम 5 या 6 होना चाहिए:<ref name="rees_1992">जोनाथन रीस, [http://mumble.net/~jar/pubs/scheme-of-things/june-92-meeting.ps द स्कीम ऑफ़ थिंग्स द जून 1992 मीटिंग] {{Webarchive|url=https://web.archive.org/web/20110716071317/http://mumble.net/~jar/pubs/scheme-of-things/june-92-meeting.ps# |date=2011-07-16 }} (पोस्टस्क्रिप्ट), लिस्प पॉइंटर्स में, वी (4), अक्टूबर-दिसंबर 1992।
इस भ्रम का कारण यह है कि योजना में इसके शाब्दिक दायरे के साथ एक अभिव्यक्ति का मूल्यांकन करने का परिणाम इस बात पर निर्भर करता है कि इसका मूल्यांकन कहाँ किया जाता है। उदाहरण के लिए, यह स्पष्ट नहीं है कि निम्नलिखित अभिव्यक्ति का मूल्यांकन करने का परिणाम 5 या 6 होना चाहिए:<ref name="rees_1992">जोनाथन रीस, [http://mumble.net/~jar/pubs/scheme-of-things/june-92-meeting.ps द स्कीम ऑफ़ थिंग्स द जून 1992 मीटिंग] {{Webarchive|url=https://web.archive.org/web/20110716071317/http://mumble.net/~jar/pubs/scheme-of-things/june-92-meeting.ps# |date=2011-07-16 }} (पोस्टस्क्रिप्ट), लिस्प पॉइंटर्स में, वी (4), अक्टूबर-दिसंबर 1992।
Line 387: Line 403:
यदि बाहरी वातावरण में इसका मूल्यांकन किया जाता है, जहां <code>name</code> परिभाषित किया गया है, परिणाम ऑपरेंड का योग है। यदि इसका मूल्यांकन आंतरिक वातावरण में किया जाता है, जहां प्रतीक + को प्रक्रिया * के मान के लिए बाध्य किया गया है, परिणाम दो ऑपरेंड का उत्पाद है।
यदि बाहरी वातावरण में इसका मूल्यांकन किया जाता है, जहां <code>name</code> परिभाषित किया गया है, परिणाम ऑपरेंड का योग है। यदि इसका मूल्यांकन आंतरिक वातावरण में किया जाता है, जहां प्रतीक + को प्रक्रिया * के मान के लिए बाध्य किया गया है, परिणाम दो ऑपरेंड का उत्पाद है।


R5RS वातावरण लौटाने वाली तीन प्रक्रियाओं को निर्दिष्ट करके और एक प्रक्रिया प्रदान करके इस भ्रम को हल करता है <code>eval</code> जो एक एस-अभिव्यक्ति और एक वातावरण लेता है और प्रदान किए गए वातावरण में अभिव्यक्ति का मूल्यांकन करता है। (R5RS सेकंड 6.5)<ref name="r5rs" />  R6RS नामक एक प्रक्रिया प्रदान करके इसे विस्तारित करता है <code>environment</code> जिसके द्वारा प्रोग्रामर सटीक रूप से निर्दिष्ट कर सकता है कि मूल्यांकन वातावरण में किन वस्तुओं को आयात करना है।
आर5आरएस वातावरण लौटाने वाली तीन प्रक्रियाओं को निर्दिष्ट करके और एक प्रक्रिया प्रदान करके इस भ्रम को हल करता है <code>eval</code> जो एक एस-अभिव्यक्ति और एक वातावरण लेता है और प्रदान किए गए वातावरण में अभिव्यक्ति का मूल्यांकन करता है। (आर5आरएस सेकंड 6.5)<ref name="r5rs" />  आर6आरएस नामक एक प्रक्रिया प्रदान करके इसे विस्तारित करता है <code>environment</code> जिसके द्वारा प्रोग्रामर स्पष्ट रूप से निर्दिष्ट कर सकता है कि मूल्यांकन वातावरण में किन वस्तुओं को आयात करना है।


इस अभिव्यक्ति का मूल्यांकन करने के लिए आधुनिक योजना (आमतौर पर R5RS के साथ संगत) के साथ, एक फ़ंक्शन को परिभाषित करने की आवश्यकता होती है <code>evaluate</code> जो इस तरह दिख सकता है:
इस अभिव्यक्ति का मूल्यांकन करने के लिए आधुनिक योजना (आमतौर पर आर5आरएस के साथ संगत) के साथ, एक फ़ंक्शन को परिभाषित करने की आवश्यकता होती है <code>evaluate</code> जो इस तरह दिख सकता है:


<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
Line 399: Line 415:


=== बूलियन अभिव्यक्तियों में गैर-बूलियन मूल्यों का उपचार ===
=== बूलियन अभिव्यक्तियों में गैर-बूलियन मूल्यों का उपचार ===
सामान्य लिस्प सहित लिस्प की अधिकांश बोलियों में, सम्मेलन द्वारा मूल्य <code>NIL</code> बूलियन व्यंजक में गलत मान का मूल्यांकन करता है। योजना में, 1991 में IEEE मानक के बाद से,<ref name="ieee1178" />सभी मूल्यों को छोड़कर <code>#f</code>, शामिल <code>NIL</code>योजना में समकक्ष जो इस रूप में लिखा गया है <code>'()</code>, बूलियन व्यंजक में सही मान का मूल्यांकन करें। (R5RS सेकंड। 6.3.1)<ref name="r5rs" />
सामान्य लिस्प सहित लिस्प की अधिकांश बोलियों में, सम्मेलन द्वारा मूल्य <code>NIL</code> बूलियन व्यंजक में गलत मान का मूल्यांकन करता है। योजना में, 1991 में IEEE मानक के बाद से,<ref name="ieee1178" />सभी मूल्यों को छोड़कर <code>#f</code>, सम्मिलित <code>NIL</code>योजना में समकक्ष जो इस रूप में लिखा गया है <code>'()</code>, बूलियन व्यंजक में सही मान का मूल्यांकन करें। (आर5आरएस सेकंड। 6.3.1)<ref name="r5rs" />


जहां सत्य के बूलियन मान का प्रतिनिधित्व करने वाला स्थिरांक है <code>T</code> अधिकांश लिस्प्स में, योजना में यह है <code>#t</code>.
जहां सत्य के बूलियन मान का प्रतिनिधित्व करने वाला स्थिरांक है <code>T</code> अधिकांश लिस्प्स में, योजना में यह है <code>#t</code>.


=== आदिम डेटाटाइप्स की विसंगति ===
=== आदिम डेटाटाइप्स की विसंगति ===
योजना में आदिम डेटाटाइप अलग हैं। निम्न में से केवल एक विधेय किसी भी योजना वस्तु के लिए सही हो सकता है: <code>boolean?</code>, <code>pair?</code>, <code>symbol?</code>, <code>number?</code>, <code>char?</code>, <code>string?</code>, <code>vector?</code>, <code>port?</code>, <code>procedure?</code>. (R5RS सेकंड 3.2)<ref name="r5rs"/>
योजना में आदिम डेटाटाइप अलग हैं। निम्न में से केवल एक विधेय किसी भी योजना वस्तु के लिए सही हो सकता है: <code>boolean?</code>, <code>pair?</code>, <code>symbol?</code>, <code>number?</code>, <code>char?</code>, <code>string?</code>, <code>vector?</code>, <code>port?</code>, <code>procedure?</code>. (आर5आरएस सेकंड 3.2)<ref name="r5rs"/>


संख्यात्मक डेटा प्रकार के भीतर, इसके विपरीत, संख्यात्मक मान ओवरलैप होते हैं। उदाहरण के लिए, एक पूर्णांक मान सभी को संतुष्ट करता है <code>integer?</code>, <code>rational?</code>, <code>real?</code>, <code>complex?</code> और <code>number?</code> एक ही समय में भविष्यवाणी करता है। (R5RS सेकंड 6.2)<ref name="r5rs"/>
संख्यात्मक डेटा प्रकार के भीतर, इसके विपरीत, संख्यात्मक मान ओवरलैप होते हैं। उदाहरण के लिए, एक पूर्णांक मान सभी को संतुष्ट करता है <code>integer?</code>, <code>rational?</code>, <code>real?</code>, <code>complex?</code> और <code>number?</code> एक ही समय में भविष्यवाणी करता है। (आर5आरएस सेकंड 6.2)<ref name="r5rs"/>




Line 414: Line 430:
*  <code>eq?</code> का मूल्यांकन करता है <code>#f</code> जब तक इसके पैरामीटर स्मृति में समान डेटा ऑब्जेक्ट का प्रतिनिधित्व नहीं करते;
*  <code>eq?</code> का मूल्यांकन करता है <code>#f</code> जब तक इसके पैरामीटर स्मृति में समान डेटा ऑब्जेक्ट का प्रतिनिधित्व नहीं करते;
* <code>eqv?</code> आम तौर पर जैसा ही होता है <code>eq?</code> लेकिन आदिम वस्तुओं (जैसे वर्ण और संख्या) को विशेष रूप से व्यवहार करता है ताकि समान मान का प्रतिनिधित्व करने वाली संख्याएँ हों <code>eqv?</code> भले ही वे एक ही वस्तु का उल्लेख न करते हों;
* <code>eqv?</code> आम तौर पर जैसा ही होता है <code>eq?</code> लेकिन आदिम वस्तुओं (जैसे वर्ण और संख्या) को विशेष रूप से व्यवहार करता है ताकि समान मान का प्रतिनिधित्व करने वाली संख्याएँ हों <code>eqv?</code> भले ही वे एक ही वस्तु का उल्लेख न करते हों;
* <code>equal?</code> यह निर्धारित करने के लिए डेटा संरचनाओं जैसे सूचियों, वैक्टर और स्ट्रिंग्स की तुलना करता है कि क्या उनके पास सर्वांगसम संरचना है और <code>eqv?</code> सामग्री। (R5RS सेकंड। 6.1)<ref name="r5rs"/>
* <code>equal?</code> यह निर्धारित करने के लिए डेटा संरचनाओं जैसे सूचियों, वैक्टर और स्ट्रिंग्स की तुलना करता है कि क्या उनके पास सर्वांगसम संरचना है और <code>eqv?</code> सामग्री। (आर5आरएस सेकंड। 6.1)<ref name="r5rs"/>


योजना में प्रकार पर निर्भर तुल्यता संचालन भी मौजूद हैं: <code>string=?</code> और <code>string-ci=?</code> दो स्ट्रिंग्स की तुलना करें (उत्तरार्द्ध केस-स्वतंत्र तुलना करता है); <code>char=?</code> और <code>char-ci=?</code> पात्रों की तुलना करें; <code>=</code> संख्याओं की तुलना करता है।<ref name="r5rs"/>
योजना में प्रकार पर निर्भर तुल्यता संचालन भी मौजूद हैं: <code>string=?</code> और <code>string-ci=?</code> दो स्ट्रिंग्स की तुलना करें (उत्तरार्द्ध केस-स्वतंत्र तुलना करता है); <code>char=?</code> और <code>char-ci=?</code> पात्रों की तुलना करें; <code>=</code> संख्याओं की तुलना करता है।<ref name="r5rs"/>
Line 420: Line 436:


=== टिप्पणियाँ ===
=== टिप्पणियाँ ===
{{See also|Comment (computer programming)}}
{{See also|टिप्पणी (कंप्यूटर प्रोग्रामिंग)}}
R5RS मानक तक, योजना में मानक टिप्पणी अर्धविराम थी, जो शेष रेखा को योजना के लिए अदृश्य बना देती है। कई कार्यान्वयनों ने वैकल्पिक सम्मेलनों का समर्थन किया है जो टिप्पणियों को एक पंक्ति से अधिक विस्तारित करने की अनुमति देते हैं, और R6RS मानक उनमें से दो की अनुमति देता है: एक संपूर्ण एस-अभिव्यक्ति को एक टिप्पणी (या टिप्पणी की गई) में बदल दिया जा सकता है, इसके पहले <code><nowiki>#;</nowiki></code> (SRFI 62 में पेश किया गया<ref>{{Cite web |last=Taylor Campbell |date=2005-07-21 |title=SRFI 62: S-expression comments |url=http://srfi.schemers.org/srfi-62/srfi-62.html |access-date=2012-08-09 |publisher=The SRFI Editors, schemers.org}}</ref>) और एक बहुपंक्ति टिप्पणी या ब्लॉक टिप्पणी आसपास के पाठ द्वारा निर्मित की जा सकती है <code><nowiki>#</nowiki>|</code> और <code>|#</code>.
 
आर5आरएस मानक तक, योजना में मानक टिप्पणी अर्धविराम थी, जो शेष रेखा को योजना के लिए अदृश्य बना देती है। कई कार्यान्वयनों ने वैकल्पिक सम्मेलनों का समर्थन किया है जो टिप्पणियों को एक पंक्ति से अधिक विस्तारित करने की अनुमति देते हैं, और आर6आरएस मानक उनमें से दो को अनुमति देता है: एक संपूर्ण एस-अभिव्यक्ति को <code><nowiki>#;</nowiki></code> के साथ पूर्ववर्ती करके एक टिप्पणी (या "टिप्पणी आउट") में बदल दिया जा सकता है '''#''' एक संपूर्ण एस-अभिव्यक्ति को एक टिप्पणी (या टिप्पणी की गई) में बदल दिया जा सकता है, इसके पहले (एसआरएफआई 62 में प्रस्तुत किया गया<ref>{{Cite web |last=Taylor Campbell |date=2005-07-21 |title=SRFI 62: S-expression comments |url=http://srfi.schemers.org/srfi-62/srfi-62.html |access-date=2012-08-09 |publisher=The SRFI Editors, schemers.org}}</ref>) और एक बहुपंक्ति टिप्पणी <code><nowiki>#</nowiki>|</code> या ब्लॉक टिप्पणी <code>|#</code> आसपास के पाठ द्वारा निर्मित की जा सकती है।


=== इनपुट/आउटपुट ===
=== इनपुट/आउटपुट ===
स्कीम का इनपुट और आउटपुट पोर्ट डेटाटाइप पर आधारित है। (R5RS सेकंड 6.6)<ref name="r5rs"/>  R5RS प्रक्रियाओं के साथ सुलभ दो डिफ़ॉल्ट पोर्ट को परिभाषित करता है <code>current-input-port</code> और <code>current-output-port</code>, जो मानक धाराओं की यूनिक्स धारणाओं के अनुरूप है। अधिकांश कार्यान्वयन भी प्रदान करते हैं <code>current-error-port</code>. इनपुट और मानक आउटपुट का [[पुनर्निर्देशन (कंप्यूटिंग)]] मानक प्रक्रियाओं जैसे मानक में समर्थित है <code>with-input-from-file</code> और <code>with-output-to-file</code>. अधिकांश कार्यान्वयन समान पुनर्निर्देशन क्षमताओं के साथ स्ट्रिंग पोर्ट प्रदान करते हैं, SRFI 6 में वर्णित प्रक्रियाओं का उपयोग करते हुए, फाइलों के बजाय स्ट्रिंग बफ़र्स पर कई सामान्य इनपुट-आउटपुट संचालन को सक्षम करते हैं।<ref name="srfi-6">{{Cite web |last=William D Clinger |date=1999-07-01 |title=SRFI 6: Basic String Ports |url=http://srfi.schemers.org/srfi-6/srfi-6.html |access-date=2012-08-09 |publisher=The SRFI Editors, schemers.org}}</ref> R6RS मानक बहुत अधिक परिष्कृत और सक्षम बंदरगाह प्रक्रियाओं और कई नए प्रकार के बंदरगाहों को निर्दिष्ट करता है।
योजना का इनपुट और आउटपुट पोर्ट डेटाटाइप पर आधारित है। (आर5आरएस सेकंड 6.6)<ref name="r5rs"/>  आर5आरएस प्रक्रियाओं के साथ दो डिफ़ॉल्ट पोर्ट <code>current-input-port</code> और <code>current-output-port</code> को परिभाषित करता है, जो मानक धाराओं की यूनिक्स धारणाओं के अनुरूप है। अधिकांश कार्यान्वयन <code>current-error-port</code> भी प्रदान करते हैं, इनपुट और मानक आउटपुट का [[पुनर्निर्देशन (कंप्यूटिंग)]] मानक प्रक्रियाओं जैसे कि <code>with-input-from-file</code> और <code>with-output-to-file</code> मानक में समर्थित है। अधिकांश कार्यान्वयन समान पुनर्निर्देशन क्षमताओं के साथ स्ट्रिंग पोर्ट प्रदान करते हैं, एसआरएफआई 6 में वर्णित प्रक्रियाओं का उपयोग करते हुए, फाइलों के अतिरिक्त स्ट्रिंग बफ़र्स पर कई सामान्य इनपुट-आउटपुट संचालन को सक्षम करते हैं।<ref name="srfi-6">{{Cite web |last=William D Clinger |date=1999-07-01 |title=SRFI 6: Basic String Ports |url=http://srfi.schemers.org/srfi-6/srfi-6.html |access-date=2012-08-09 |publisher=The SRFI Editors, schemers.org}}</ref> आर6आरएस मानक बहुत अधिक परिष्कृत और सक्षम बंदरगाह प्रक्रियाओं और कई नए प्रकार के बंदरगाहों को निर्दिष्ट करता है।


निम्नलिखित उदाहरण सख्त R5RS योजना में लिखे गए हैं।
निम्नलिखित उदाहरण कठोर आर5आरएस योजना में लिखे गए हैं।


उदाहरण 1: आउटपुट डिफ़ॉल्ट (वर्तमान-आउटपुट-पोर्ट) के साथ:
उदाहरण 1: आउटपुट डिफ़ॉल्ट (वर्तमान-आउटपुट-पोर्ट) के साथ:
<वाक्यविन्यास लैंग = योजना>
 
(चलो ((हैलो0 (लैम्ब्डा) (हैलो वर्ल्ड प्रदर्शित करें) (न्यूलाइन))))
(let ((hello0 (lambda() (display "Hello world") (newline))))
  (हैलो0))
 
</वाक्यविन्यास हाइलाइट>
(hello0))


उदाहरण 2: 1 के रूप में, लेकिन आउटपुट प्रक्रियाओं के लिए वैकल्पिक पोर्ट तर्क का उपयोग करना
उदाहरण 2: 1 के रूप में, लेकिन आउटपुट प्रक्रियाओं के लिए वैकल्पिक पोर्ट तर्क का उपयोग करना
<वाक्यविन्यास लैंग = योजना>
 
(चलो ((हैलो 1 (लैम्ब्डा (पी) (हैलो वर्ल्ड पी प्रदर्शित करें) (न्यूलाइन पी))))
(let ((hello1 (lambda (p) (display "Hello world" p) (newline p))))
  (हैलो 1 (वर्तमान-आउटपुट-पोर्ट)))
 
</वाक्यविन्यास हाइलाइट>
(hello1 (current-output-port)))


उदाहरण 3: 1 के रूप में, लेकिन आउटपुट को नई बनाई गई फ़ाइल पर पुनर्निर्देशित किया जाता है
उदाहरण 3: 1 के रूप में, लेकिन आउटपुट को नई बनाई गई फ़ाइल पर पुनर्निर्देशित किया जाता है
<वाक्यविन्यास लैंग = योजना>
;; एनबी: आउटपुट-टू-फाइल के साथ R5RS में एक वैकल्पिक प्रक्रिया है
(चलो ((हैलो0 (लैम्ब्डा () (हैलो वर्ल्ड प्रदर्शित करें) (न्यूलाइन))))
  (साथ-आउटपुट-टू-फाइल helloworldoutputfile hello0))
</वाक्यविन्यास हाइलाइट>


उदाहरण 4: 2 के रूप में, लेकिन फ़ाइल में आउटपुट भेजने के लिए स्पष्ट फ़ाइल खुली और बंदरगाह बंद है
<nowiki>;;</nowiki> NB<nowiki>:</nowiki> with-output-to-file is an optional procedure in R5RS
<वाक्यविन्यास लैंग = योजना>
 
(चलो ((हैलो 1 (लैम्ब्डा (पी) (हैलो वर्ल्ड पी प्रदर्शित करें) (न्यूलाइन पी)))
(let ((hello0 (lambda () (display "Hello world") (newline))))
      (आउटपुट-पोर्ट (ओपन-आउटपुट-फाइल helloworldoutputfile )))
 
  (हैलो 1 आउटपुट-पोर्ट)
(with-output-to-file "helloworldoutputfile" hello0))
  (क्लोज़-आउटपुट-पोर्ट आउटपुट-पोर्ट))
;; '''एनबी''': '''आउटपुट-टू-फाइल के साथ आर5आरएस में एक वैकल्पिक प्रक्रिया है'''
</वाक्यविन्यास हाइलाइट>
'''(चलो ((हैलो0 (लैम्ब्डा () (हैलो वर्ल्ड प्रदर्शित करें) (न्यूलाइन))))'''
  '''(साथ-आउटपुट-टू-फाइल helloworldoutputfile hello0))'''
'''</वाक्यविन्यास हाइलाइट>'''
 
उदाहरण 4:2 के रूप में, लेकिन फ़ाइल में आउटपुट भेजने के लिए स्पष्ट फ़ाइल खुली और बंदरगाह बंद है
 
'''<वाक्यविन्यास लैंग = योजना>'''
 
(let ((hello1 (lambda (p) (display "Hello world" p) (newline p)))
    (output-port (open-output-file "helloworldoutputfile")))
 
  (hello1 output-port)
  (close-output-port output-port))
'''</वाक्यविन्यास हाइलाइट>'''


उदाहरण 5: 2 के रूप में, लेकिन फ़ाइल में आउटपुट भेजने के लिए कॉल-विद-आउटपुट-फाइल का उपयोग करने के साथ।
उदाहरण 5: 2 के रूप में, लेकिन फ़ाइल में आउटपुट भेजने के लिए कॉल-विद-आउटपुट-फाइल का उपयोग करने के साथ।
<वाक्यविन्यास लैंग = योजना>
(चलो ((हैलो 1 (लैम्ब्डा (पी) (हैलो वर्ल्ड पी प्रदर्शित करें) (न्यूलाइन पी))))
  (कॉल-विद-आउटपुट-फाइल helloworldoutputfile hello1))
</वाक्यविन्यास हाइलाइट>


इनपुट के लिए समान प्रक्रियाएं प्रदान की जाती हैं। R5RS योजना विधेय प्रदान करती है <code>input-port?</code> और <code>output-port?</code>. चरित्र इनपुट और आउटपुट के लिए, <code>write-char</code>, <code>read-char</code>, <code>peek-char</code> और <code>char-ready?</code> उपलब्ध कराए गए। योजना के भाव लिखने और पढ़ने के लिए, योजना प्रदान करती है <code>read</code> और <code>write</code>. रीड ऑपरेशन पर, यदि इनपुट पोर्ट फ़ाइल के अंत तक पहुँच गया है, तो लौटाया गया परिणाम फ़ाइल का अंत है, और इसे विधेय का उपयोग करके परीक्षण किया जा सकता है <code>eof-object?</code>.
'''<वाक्यविन्यास लैंग = योजना>'''
 
(let ((hello1 (lambda (p) (display "Hello world" p) (newline p))))
  (call-with-output-file "helloworldoutputfile" hello1))
'''</वाक्यविन्यास हाइलाइट>'''
 
इनपुट के लिए समान प्रक्रियाएं प्रदान की जाती हैं। आर5आरएस योजना विधेय <code>input-port?</code> और <code>output-port?</code> प्रदान करती है। चरित्र इनपुट और आउटपुट के लिए, <code>write-char</code>, <code>read-char</code>, <code>peek-char</code> और <code>char-ready?</code> उपलब्ध कराए गए हैं। योजना के भाव लिखने और पढ़ने के लिए, <code>write</code> और <code>read</code> योजना प्रदान करती है। रीड ऑपरेशन पर, यदि इनपुट पोर्ट फ़ाइल के अंत तक पहुँच गया है, तो लौटाया गया परिणाम फ़ाइल का अंत है, और इसे विधेय <code>eof-object?</code> का उपयोग करके परीक्षण किया जा सकता है।
 
मानक के अतिरिक्त, एसआरएफआई 28 सामान्य लिस्प के समान एक मूलभूत स्वरूपण प्रक्रिया को परिभाषित करता है, जिसके बाद इसका नाम <code>format</code> कार्य दिया गया है।<ref name="srfi-28">{{Cite web |last=Scott G. Miller |date=2002-06-25 |title=SRFI 28: Basic Format Strings |url=http://srfi.schemers.org/srfi-28/srfi-28.html |access-date=2012-08-09 |publisher=The SRFI Editors, schemers.org}}</ref>


मानक के अतिरिक्त, एसआरएफआई 28 सामान्य लिस्प के समान एक बुनियादी स्वरूपण प्रक्रिया को परिभाषित करता है <code>format</code> कार्य, जिसके बाद इसका नाम दिया गया है।<ref name="srfi-28">{{Cite web |last=Scott G. Miller |date=2002-06-25 |title=SRFI 28: Basic Format Strings |url=http://srfi.schemers.org/srfi-28/srfi-28.html |access-date=2012-08-09 |publisher=The SRFI Editors, schemers.org}}</ref>




=== मानक प्रक्रियाओं की पुनर्व्याख्या ===
=== मानक प्रक्रियाओं की पुनर्व्याख्या ===
योजना में, प्रक्रियाएं चर के लिए बाध्य हैं। R5RS में भाषा मानक औपचारिक रूप से अनिवार्य है कि कार्यक्रम अंतर्निहित प्रक्रियाओं के चर बंधनों को बदल सकते हैं, उन्हें प्रभावी ढंग से पुनर्परिभाषित कर सकते हैं। (R5RS भाषा परिवर्तन )<ref name="r5rs"/>  उदाहरण के लिए, कोई विस्तार कर सकता है <code>+</code> स्ट्रिंग्स के साथ-साथ संख्याओं को फिर से परिभाषित करके स्वीकार करने के लिए:
योजना में, प्रक्रियाएं चर के लिए बाध्य हैं। आर5आरएस में भाषा मानक औपचारिक रूप से अनिवार्य है कि कार्यक्रम अंतर्निहित प्रक्रियाओं के चर बंधनों को बदल सकते हैं, उन्हें प्रभावी ढंग से पुनर्परिभाषित कर सकते हैं। आर5आरएस भाषा परिवर्तन,<ref name="r5rs"/>  उदाहरण के लिए, स्ट्रिंग्स के साथ-साथ संख्याओं को फिर से परिभाषित करके स्वीकार करने के लिए <code>+</code> का विस्तार किया जा सकता है:


<वाक्यविन्यास लैंग = योजना>
<वाक्यविन्यास लैंग = योजना>
(सेट! +
      (set! +
      (चलो ((मूल+ +))
        (लैम्ब्डा तर्क देता है
          (लागू करें (अगर (या (शून्य? तर्क) (स्ट्रिंग? (कार तर्क)))
                    स्ट्रिंग-जोड़ें
                    मूल+)
                आर्ग्स))))
(+ 1 2 3)
===> 6
(+ 1 2 3 )
===> 123
</वाक्यविन्यास हाइलाइट>


R6RS में मानक सहित प्रत्येक बंधन, कुछ पुस्तकालय से संबंधित है, और सभी निर्यातित बंधन अपरिवर्तनीय हैं। (R6RS सेकंड 7.1)<ref name="r6rs"/>  इस वजह से, उत्परिवर्तन द्वारा मानक प्रक्रियाओं को पुनर्परिभाषित करना प्रतिबंधित है। इसके बजाय, एक मानक प्रक्रिया के नाम से एक अलग प्रक्रिया आयात करना संभव है, जो वास्तव में पुनर्वितरण के समान है।
      (let ((original+ +))
        (lambda args
          (apply (if (or (null? args) (string? (car args)))
                      string-append
                      original+)
                  args))))
(+ 1 2 3)
===> 6
(+ "1" "2" "3")
===> "123"
आर6आरएस (आर6आरएस सेकंड 7.1) में मानक सहित प्रत्येक बंधन, कुछ पुस्तकालय से संबंधित है, और सभी निर्यातित बंधन अपरिवर्तनीय हैं।<ref name="r6rs" />  इस कारण से, उत्परिवर्तन द्वारा मानक प्रक्रियाओं को पुनर्परिभाषित करना प्रतिबंधित है। इसके अतिरिक्त, एक मानक प्रक्रिया के नाम से एक अलग प्रक्रिया आयात करना संभव है, जो वास्तव में पुनर्वितरण के समान है।


=== नामकरण और नामकरण परंपराएं ===
=== नामकरण और नामकरण परंपराएं ===
मानक योजना में, एक डेटाटाइप से दूसरे डेटाटाइप में परिवर्तित होने वाली प्रक्रियाओं में वर्ण स्ट्रिंग होती है -> उनके नाम पर, एक के साथ समाप्त होने की भविष्यवाणी करता है? , और प्रक्रियाएँ जो पहले से आवंटित डेटा के मान को बदल देती हैं, के साथ समाप्त हो जाती हैं ! . इन सम्मेलनों का अक्सर योजना प्रोग्रामर द्वारा पालन किया जाता है।
मानक योजना में, एक डेटाटाइप से दूसरे डेटाटाइप में परिवर्तित होने वाली प्रक्रियाओं में वर्ण स्ट्रिंग होती है -> उनके नाम पर, एक के साथ समाप्त होने की भविष्यवाणी करता है? , और प्रक्रियाएँ जो पहले से आवंटित डेटा के मान को बदल देती हैं, के साथ समाप्त हो जाती हैं ! . इन सम्मेलनों का अधिकांशतः योजना प्रोग्रामर द्वारा पालन किया जाता है।


योजना मानकों जैसे औपचारिक संदर्भों में, लैम्ब्डा अभिव्यक्ति या आदिम प्रक्रिया को संदर्भित करने के लिए कार्य करने के लिए शब्द प्रक्रिया का उपयोग वरीयता में किया जाता है। सामान्य उपयोग में, शब्द प्रक्रिया और कार्य परस्पर विनिमय के लिए उपयोग किए जाते हैं। प्रक्रिया आवेदन को कभी-कभी औपचारिक रूप से संयोजन के रूप में संदर्भित किया जाता है।
योजना मानकों जैसे औपचारिक संदर्भों में, लैम्ब्डा अभिव्यक्ति या आदिम प्रक्रिया को संदर्भित करने के लिए कार्य करने के लिए शब्द प्रक्रिया का उपयोग वरीयता में किया जाता है। सामान्य उपयोग में, शब्द प्रक्रिया और कार्य परस्पर विनिमय के लिए उपयोग किए जाते हैं। प्रक्रिया आवेदन को कभी-कभी औपचारिक रूप से संयोजन के रूप में संदर्भित किया जाता है।
Line 492: Line 519:
अन्य लिस्प्स की तरह, थंक शब्द का उपयोग योजना में बिना किसी तर्क के एक प्रक्रिया को संदर्भित करने के लिए किया जाता है। प्रॉपर टेल रिकर्सन शब्द सभी योजना कार्यान्वयनों की संपत्ति को संदर्भित करता है, कि वे टेल-कॉल ऑप्टिमाइज़ेशन करते हैं ताकि सक्रिय [[टेल कॉल]] की अनिश्चित संख्या का समर्थन किया जा सके।
अन्य लिस्प्स की तरह, थंक शब्द का उपयोग योजना में बिना किसी तर्क के एक प्रक्रिया को संदर्भित करने के लिए किया जाता है। प्रॉपर टेल रिकर्सन शब्द सभी योजना कार्यान्वयनों की संपत्ति को संदर्भित करता है, कि वे टेल-कॉल ऑप्टिमाइज़ेशन करते हैं ताकि सक्रिय [[टेल कॉल]] की अनिश्चित संख्या का समर्थन किया जा सके।


R3RS, संशोधित के बाद से मानकों के दस्तावेजों के शीर्षक का रूप<sup>n</sup> एल्गोरिथम भाषा योजना पर रिपोर्ट, ALGOL मानक दस्तावेज़ के शीर्षक का एक संदर्भ है, एल्गोरिद्मिक भाषा Algol 60 पर संशोधित रिपोर्ट, R3RS का सारांश पृष्ठ ALGOL 60 रिपोर्ट के सारांश पृष्ठ पर बारीकी से तैयार किया गया है .<ref name="algol_report">{{Cite journal |last=J.W. Backus |last2=F.L. Bauer |last3=J.Green |last4=C. Katz |last5=J. McCarthy P. Naur |display-authors=etal |date=January–April 1960 |title=एल्गोरिद्मिक लैंग्वेज एल्गोल 60 पर संशोधित रिपोर्ट|url=http://www.masswerk.at/algol60/report.htm |journal=Numerische Mathematik, Communications of the ACM, and Journal of the British Computer Society |access-date=2012-08-09}}</रेफरी><ref name="r3rs">{{Cite journal |date=December 1986 |editor2-last=William Clinger |title=Revised(3) Report on the Algorithmic Language Scheme (Dedicated to the Memory of ALGOL 60) |url=http://groups.csail.mit.edu/mac/ftpdir/scheme-reports/r3rs-html/r3rs_toc.html |journal=ACM SIGPLAN Notices |volume=21 |issue=12 |pages=37–79 |citeseerx=10.1.1.29.3015 |doi=10.1145/15042.15043 |access-date=2012-08-09 |editor=Jonathan Rees |hdl=1721.1/6424 |s2cid=43884422}}</ref>
आर3आरएस, संशोधित के बाद से मानकों के दस्तावेजों के शीर्षक का रूप एल्गोरिथम भाषा योजना पर सूची, एल्गोल मानक दस्तावेज़ के शीर्षक का एक संदर्भ है, एल्गोरिद्मिक भाषा एल्गोल 60 पर संशोधित सूची, आर3आरएस का सारांश पृष्ठ एल्गोल 60 सूची के सारांश पृष्ठ पर बारीकी से तैयार किया गया है .<ref name="algol_report">{{Cite journal |last=J.W. Backus |last2=F.L. Bauer |last3=J.Green |last4=C. Katz |last5=J. McCarthy P. Naur |display-authors=etal |date=January–April 1960 |title=एल्गोरिद्मिक लैंग्वेज एल्गोल 60 पर संशोधित रिपोर्ट|url=http://www.masswerk.at/algol60/report.htm |journal=Numerische Mathematik, Communications of the ACM, and Journal of the British Computer Society |access-date=2012-08-09}}</रेफरी><ref name="r3rs">{{Cite journal |date=December 1986 |editor2-last=William Clinger |title=Revised(3) Report on the Algorithmic Language Scheme (Dedicated to the Memory of ALGOL 60) |url=http://groups.csail.mit.edu/mac/ftpdir/scheme-reports/r3rs-html/r3rs_toc.html |journal=ACM SIGPLAN Notices |volume=21 |issue=12 |pages=37–79 |citeseerx=10.1.1.29.3015 |doi=10.1145/15042.15043 |access-date=2012-08-09 |editor=Jonathan Rees |hdl=1721.1/6424 |s2cid=43884422}}</ref>




== मानक रूपों और प्रक्रियाओं की समीक्षा ==
== मानक रूपों और प्रक्रियाओं की समीक्षा ==
भाषा को औपचारिक रूप से मानकों R5RS (1998) और R6RS (2007) में परिभाषित किया गया है। वे मानक रूपों का वर्णन करते हैं: कीवर्ड और संबंधित सिंटैक्स, जो भाषा की नियंत्रण संरचना प्रदान करते हैं, और मानक प्रक्रियाएं जो सामान्य कार्य करती हैं।
भाषा को औपचारिक रूप से मानकों आर5आरएस (1998) और आर6आरएस (2007) में परिभाषित किया गया है। वे मानक रूपों का वर्णन करते हैं: कीवर्ड और संबंधित वाक्य-विन्यास, जो भाषा की नियंत्रण संरचना प्रदान करते हैं, और मानक प्रक्रियाएं जो सामान्य कार्य करती हैं।


=== मानक रूप ===
=== मानक रूप ===
यह तालिका योजना में मानक रूपों का वर्णन करती है। कुछ रूप एक से अधिक पंक्तियों में दिखाई देते हैं क्योंकि उन्हें आसानी से भाषा में एक ही कार्य में वर्गीकृत नहीं किया जा सकता है।
यह तालिका योजना में मानक रूपों का वर्णन करती है। कुछ रूप एक से अधिक पंक्तियों में दिखाई देते हैं क्योंकि उन्हें सरलता से भाषा में एक ही कार्य में वर्गीकृत नहीं किया जा सकता है।


इस तालिका में एल चिह्नित रूपों को मानक में व्युत्पन्न पुस्तकालय रूपों के रूप में वर्गीकृत किया गया है और अक्सर अभ्यास में अधिक मौलिक रूपों का उपयोग करके मैक्रोज़ के रूप में कार्यान्वित किया जाता है, जिससे कार्यान्वयन का कार्य अन्य भाषाओं की तुलना में अधिक आसान हो जाता है।
इस तालिका में एल चिह्नित रूपों को मानक में व्युत्पन्न पुस्तकालय रूपों के रूप में वर्गीकृत किया गया है और अधिकांशतः अभ्यास में अधिक मौलिक रूपों का उपयोग करके मैक्रोज़ के रूप में कार्यान्वित किया जाता है, जिससे कार्यान्वयन का कार्य अन्य भाषाओं की तुलना में अधिक आसान हो जाता है।


{| class="wikitable"
{| class="wikitable"
|+ Standard forms in the language R5RS Scheme
|+ भाषा आर5आरएस योजना में मानक प्रपत्र
! Purpose               !!  Forms
! उद्देश्य               !!  फॉर्म
|-
|-
| Definition             || {{mono|define}}
| परिभाषा             || {{mono|define}}
|-
|-
| Binding constructs     || {{mono|lambda, do (L), let (L), let* (L), letrec (L)}}
| बाध्यकारी संरचनाएं     || {{mono|lambda, do (L), let (L), let* (L), letrec (L)}}
|-
|-
| Conditional evaluation || {{mono|if, cond (L), case (L), and (L), or (L)}}
| सशर्त मूल्यांकन || {{mono|if, cond (L), case (L), and (L), or (L)}}
|-
|-
| Sequential evaluation || {{mono|begin (*)}}
| अनुक्रमिक मूल्यांकन || {{mono|begin (*)}}
|-
|-
| Iteration             || {{mono|lambda, do (L), named let (L)}}
| पुनरावृत्ति             || {{mono|lambda, do (L), named let (L)}}
|-
|-
| Syntactic extension   || {{mono|define-syntax, let-syntax, letrec-syntax, syntax-rules (R5RS), syntax-case (R6RS)}}
| वाक्यात्मक विस्तार   || {{mono|define-syntax, let-syntax, letrec-syntax, syntax-rules (R5RS), syntax-case (R6RS)}}
|-
|-
| Quoting               || {{mono|quote('), unquote(,), quasiquote(`), unquote-splicing(,@)}}
| उद्धरण               || {{mono|quote('), unquote(,), quasiquote(`), unquote-splicing(,@)}}
|-
|-
| Assignment             || {{mono|set!}}
| नियत कार्य             || {{mono|set!}}
|-
|-
| Delayed evaluation     || {{mono|delay (L)}}
| विलंबित मूल्यांकन     || {{mono|delay (L)}}
|}
|}
ध्यान दें कि <code>begin</code> R5RS में लाइब्रेरी सिंटैक्स के रूप में परिभाषित किया गया है, लेकिन विस्तारक को स्प्लिसिंग कार्यक्षमता प्राप्त करने के लिए इसके बारे में जानना आवश्यक है। R6RS में यह अब लाइब्रेरी सिंटैक्स नहीं है।
ध्यान दें कि <code>begin</code> आर5आरएस में लाइब्रेरी वाक्य-विन्यास के रूप में परिभाषित किया गया है, लेकिन विस्तारक को स्प्लिसिंग कार्यक्षमता प्राप्त करने के लिए इसके बारे में जानना आवश्यक है। आर6आरएस में यह अब लाइब्रेरी वाक्य-विन्यास नहीं है।


=== मानक प्रक्रियाएं ===
=== मानक प्रक्रियाएं ===
निम्नलिखित दो तालिकाएँ R5RS योजना में मानक प्रक्रियाओं का वर्णन करती हैं। R6RS कहीं अधिक व्यापक है और इस प्रकार का सारांश व्यावहारिक नहीं होगा।
निम्नलिखित दो तालिकाएँ आर5आरएस योजना में मानक प्रक्रियाओं का वर्णन करती हैं। आर6आरएस कहीं अधिक व्यापक है और इस प्रकार का सारांश व्यावहारिक नहीं होगा।


कुछ प्रक्रियाएँ एक से अधिक पंक्तियों में दिखाई देती हैं क्योंकि उन्हें आसानी से भाषा में एक ही कार्य में वर्गीकृत नहीं किया जा सकता है।
कुछ प्रक्रियाएँ एक से अधिक पंक्तियों में दिखाई देती हैं क्योंकि उन्हें सरलता से भाषा में एक ही कार्य में वर्गीकृत नहीं किया जा सकता है।
{| class="wikitable"
{| class="wikitable"
|+ Standard procedures in the language R5RS Scheme
|+ भाषा आर5आरएस योजना में मानक प्रक्रियाएं
! Purpose !! Procedures
! उद्देश्य !! प्रक्रियाएं
|-
|-
| Construction   || {{mono|vector, make-vector, make-string, list}}
| निर्माण   || {{mono|vector, make-vector, make-string, list}}
|-
|-
| Equivalence predicates || {{mono|1=eq?, eqv?, equal?, string=?, string-ci=?, char=?, char-ci=?}}
| समतुल्यता विधेय || {{mono|1=eq?, eqv?, equal?, string=?, string-ci=?, char=?, char-ci=?}}
|-
|-
| [[Type conversion]] || {{mono|vector->list, list->vector, number->string, string->number, symbol->string, string->symbol, char->integer, integer->char, string->list, list->string}}
| [[Type conversion|प्रकार रूपांतरण]] || {{mono|vector->list, list->vector, number->string, string->number, symbol->string, string->symbol, char->integer, integer->char, string->list, list->string}}
|-
|-
| Numbers         || {{mono|''See separate table''}}
| संख्याएँ         || {{mono|''See separate table''}}
|-
|-
| Strings         || {{mono|1=string?, make-string, string, string-length, string-ref, string-set!, string=?, string-ci=?, string<? string-ci<?, string<=? string-ci<=?, string>? string-ci>?, string>=? string-ci>=?, substring, string-append, string->list, list->string, string-copy, string-fill!}}
| स्ट्रिंग्स         || {{mono|1=string?, make-string, string, string-length, string-ref, string-set!, string=?, string-ci=?, string<? string-ci<?, string<=? string-ci<=?, string>? string-ci>?, string>=? string-ci>=?, substring, string-append, string->list, list->string, string-copy, string-fill!}}
|-
|-
| Characters     || {{mono|1=char?, char=?, char-ci=?, char<? char-ci<?, char<=? char-ci<=?, char>? char-ci>?, char>=? char-ci>=?, char-alphabetic?, char-numeric?, char-whitespace?, char-upper-case?, char-lower-case?, char->integer, integer->char, char-upcase, char-downcase}}
| वर्ण     || {{mono|1=char?, char=?, char-ci=?, char<? char-ci<?, char<=? char-ci<=?, char>? char-ci>?, char>=? char-ci>=?, char-alphabetic?, char-numeric?, char-whitespace?, char-upper-case?, char-lower-case?, char->integer, integer->char, char-upcase, char-downcase}}
|-
|-
| Vectors         || {{mono|make-vector, vector, vector?, vector-length, vector-ref, vector-set!, vector->list, list->vector, vector-fill!}}
| सदिश         || {{mono|make-vector, vector, vector?, vector-length, vector-ref, vector-set!, vector->list, list->vector, vector-fill!}}
|-
|-
| Symbols         || {{mono|symbol->string, string->symbol, symbol?}}
| प्रतीक         || {{mono|symbol->string, string->symbol, symbol?}}
|-
|-
| Pairs and lists || {{mono|pair?, cons, car, cdr, set-car!, set-cdr!, null?, list?, list, length, append, reverse, list-tail, list-ref, memq. memv. member, assq, assv, assoc, list->vector, vector->list, list->string, string->list}}
| जोड़े और सूचियाँ || {{mono|pair?, cons, car, cdr, set-car!, set-cdr!, null?, list?, list, length, append, reverse, list-tail, list-ref, memq. memv. member, assq, assv, assoc, list->vector, vector->list, list->string, string->list}}
|-
|-
| Identity predicates || {{mono|boolean?, pair?, symbol?, number?, char?, string?, vector?, port?, procedure?}}
| पहचान विधेय || {{mono|boolean?, pair?, symbol?, number?, char?, string?, vector?, port?, procedure?}}
|-
|-
| Continuations   || {{mono|call-with-current-continuation (call/cc), values, call-with-values, dynamic-wind}}
| निरंतरता   || {{mono|call-with-current-continuation (call/cc), values, call-with-values, dynamic-wind}}
|-
|-
| Environments   || {{mono|eval, scheme-report-environment, null-environment, interaction-environment (optional)}}
| वातावरण   || {{mono|eval, scheme-report-environment, null-environment, interaction-environment (optional)}}
|-
|-
| Input/output   || {{mono|display, newline, read, write, read-char, write-char, peek-char, char-ready?, eof-object? open-input-file, open-output-file, close-input-port, close-output-port, input-port?, output-port?, current-input-port, current-output-port, call-with-input-file, call-with-output-file, with-input-from-file(optional), with-output-to-file(optional)}}
| इनपुट/आउटपुट   || {{mono|display, newline, read, write, read-char, write-char, peek-char, char-ready?, eof-object? open-input-file, open-output-file, close-input-port, close-output-port, input-port?, output-port?, current-input-port, current-output-port, call-with-input-file, call-with-output-file, with-input-from-file(optional), with-output-to-file(optional)}}
|-
|-
| System interface || {{mono|load (optional), transcript-on (optional), transcript-off (optional)}}
| प्रणाली इंटरफेस || {{mono|load (optional), transcript-on (optional), transcript-off (optional)}}
|-
|-
| Delayed evaluation || {{mono|force}}
| विलंबित मूल्यांकन || {{mono|force}}
|-
|-
| Functional programming || {{mono|procedure?, apply, map, for-each}}
| कार्यात्मक प्रोग्रामिंग || {{mono|procedure?, apply, map, for-each}}
|-
|-
| Booleans       || {{mono|boolean? not}}
| बूलियन्स       || {{mono|boolean? not}}
|}
|}
स्ट्रिंग और चरित्र प्रक्रियाएं जिनके नाम में -ci शामिल है, उनके तर्कों के बीच केस-स्वतंत्र तुलना करते हैं: एक ही वर्ण के अपर केस और लोअर केस संस्करणों को समान माना जाता है।
स्ट्रिंग और चरित्र प्रक्रियाएं जिनके नाम में -ci सम्मिलित है, उनके तर्कों के बीच केस-स्वतंत्र तुलना करते हैं: एक ही वर्ण के अपर केस और लोअर केस संस्करणों को समान माना जाता है।


{| class="wikitable"
{| class="wikitable"
|+ Standard numeric procedures in the language R5RS Scheme
|+ भाषा आर5आरएस योजना में मानक संख्यात्मक प्रक्रियाएं
! Purpose !! Procedures
! उद्देश्य !! प्रक्रियाएं
|-
|-
| Basic arithmetic operators || {{mono|+, -, *, /, abs, quotient, remainder, modulo, gcd, lcm, expt, sqrt}}
| मूल अंकगणितीय ऑपरेटर || {{mono|+, -, *, /, abs, quotient, remainder, modulo, gcd, lcm, expt, sqrt}}
|-
|-
| Rational numbers || {{mono|numerator, denominator, rational?, rationalize}}
| भिन्नात्मक संख्याएं || {{mono|numerator, denominator, rational?, rationalize}}
|-
|-
| Approximation   || {{mono|floor, ceiling, truncate, round}}
| सन्निकटन   || {{mono|floor, ceiling, truncate, round}}
|-
|-
| Exactness       || {{mono|inexact->exact, exact->inexact, exact?, inexact?}}
| शुद्धता       || {{mono|inexact->exact, exact->inexact, exact?, inexact?}}
|-
|-
| Inequalities     || {{mono|1=<, <= , >, >=, =}}
| असमानता     || {{mono|1=<, <= , >, >=, =}}
|-
|-
| Miscellaneous predicates || {{mono|zero?, negative?, positive? odd? even?}}
| विविध विधेय || {{mono|zero?, negative?, positive? odd? even?}}
|-
|-
| Maximum and minimum || {{mono|max, min}}
| अधिकतम और न्यूनतम || {{mono|max, min}}
|-
|-
| Trigonometry     || {{mono|sin, cos, tan, asin, acos, atan}}
| त्रिकोणमिति     || {{mono|sin, cos, tan, asin, acos, atan}}
|-
|-
| Exponentials     || {{mono|exp, log}}
| घातांक     || {{mono|exp, log}}
|-
|-
| Complex numbers || {{mono|make-rectangular, make-polar, real-part, imag-part, magnitude, angle, complex?}}
| सम्मिश्र संख्याएँ || {{mono|make-rectangular, make-polar, real-part, imag-part, magnitude, angle, complex?}}
|-
|-
| Input-output     || {{mono|number->string, string->number}}
| इनपुट-आउटपुट     || {{mono|number->string, string->number}}
|-
|-
| Type predicates || {{mono|integer?, rational?, real?, complex?, number?}}
| प्रकार विधेय || {{mono|integer?, rational?, real?, complex?, number?}}
|}
|}
- और / के कार्यान्वयन जो दो से अधिक तर्क लेते हैं परिभाषित हैं लेकिन R5RS पर वैकल्पिक छोड़ दिए गए हैं।
- और / के कार्यान्वयन जो दो से अधिक तर्क लेते हैं परिभाषित हैं लेकिन आर5आरएस पर वैकल्पिक छोड़ दिए गए हैं।


== कार्यान्वयन के लिए योजना अनुरोध ==
== कार्यान्वयन के लिए योजना अनुरोध ==
{{Main|Scheme Requests for Implementation}}
{{Main|कार्यान्वयन के लिए योजना अनुरोध}}
योजना के अतिसूक्ष्मवाद के कारण, कई सामान्य प्रक्रियाएँ और वाक्यात्मक रूप मानक द्वारा परिभाषित नहीं किए गए हैं। मूल भाषा को छोटा रखने के लिए लेकिन विस्तार के मानकीकरण की सुविधा के लिए, योजना समुदाय के पास कार्यान्वयन के लिए एक योजना अनुरोध (SRFI) प्रक्रिया है जिसके द्वारा विस्तार प्रस्तावों की सावधानीपूर्वक चर्चा के माध्यम से विस्तार पुस्तकालयों को परिभाषित किया जाता है। यह कोड पोर्टेबिलिटी को बढ़ावा देता है। कई SRFI सभी या अधिकांश योजना कार्यान्वयन द्वारा समर्थित हैं।


विभिन्न कार्यान्वयनों में काफी व्यापक समर्थन वाले SRFI में शामिल हैं:<ref name="srfi_support">{{Cite web |date=2009-08-30 |title=एसआरएफआई को समर्थन देने वाली योजना प्रणाली|url=http://srfi.schemers.org/srfi-implementers.html |access-date=2012-08-09 |publisher=The SRFI Editors, schemers.org}}</रेफरी>
योजना के अतिसूक्ष्मवाद के कारण, कई सामान्य प्रक्रियाएँ और वाक्यात्मक रूप मानक द्वारा परिभाषित नहीं किए गए हैं। मूल भाषा को छोटा रखने के लिए लेकिन विस्तार के मानकीकरण की सुविधा के लिए, योजना समुदाय के पास कार्यान्वयन के लिए एक योजना अनुरोध (एसआरएफआई) प्रक्रिया है जिसके द्वारा विस्तार प्रस्तावों की सावधानीपूर्वक चर्चा के माध्यम से विस्तार पुस्तकालयों को परिभाषित किया जाता है। यह कोड पोर्टेबिलिटी को बढ़ावा देता है। कई एसआरएफआई सभी या अधिकांश योजना कार्यान्वयन द्वारा समर्थित हैं।
 
विभिन्न कार्यान्वयनों में काफी व्यापक समर्थन वाले एसआरएफआई में सम्मिलित हैं:<ref name="srfi_support">{{Cite web |date=2009-08-30 |title=एसआरएफआई को समर्थन देने वाली योजना प्रणाली|url=http://srfi.schemers.org/srfi-implementers.html |access-date=2012-08-09 |publisher=The SRFI Editors, schemers.org}}</रेफरी>


* 0: सुविधा-आधारित सशर्त विस्तार निर्माण
* 0: सुविधा-आधारित सशर्त विस्तार निर्माण
Line 639: Line 667:
== कार्यान्वयन ==
== कार्यान्वयन ==
{{maincat|Scheme (programming language) implementations}}
{{maincat|Scheme (programming language) implementations}}
सुरुचिपूर्ण, न्यूनतर डिजाइन ने स्कीम को भाषा डिजाइनरों, शौकीनों और शिक्षकों के लिए एक लोकप्रिय लक्ष्य बना दिया है, और इसके छोटे आकार के कारण, एक विशिष्ट [[दुभाषिया (कंप्यूटिंग)]] के कारण, यह [[अंतः स्थापित प्रणाली]] और स्क्रिप्टिंग भाषा के लिए भी एक लोकप्रिय विकल्प है। इसके परिणामस्वरूप कार्यान्वयन के स्कोर हुए हैं,<ref name="scheme_implementations">योजना के 75 ज्ञात कार्यान्वयन द्वारा सूचीबद्ध हैं {{Cite web |date=2009-06-25 |title=योजना-अकसर किये गए सवाल|url=http://community.schemewiki.org/?scheme-faq-standards#implementations |access-date=2009-10-20 |publisher=Community Scheme Wiki}}</ref> जिनमें से अधिकांश एक दूसरे से इतने भिन्न हैं कि कार्यक्रमों को एक कार्यान्वयन से दूसरे कार्यान्वयन में पोर्ट करना काफी कठिन है, और मानक भाषा के छोटे आकार का अर्थ है कि मानक, पोर्टेबल योजना में किसी भी बड़ी जटिलता का एक उपयोगी कार्यक्रम लिखना लगभग असंभव।<ref name="position_paper" />प्रोग्रामरों के लिए अपनी अपील को व्यापक बनाने के प्रयास में, R6RS मानक बहुत व्यापक भाषा निर्दिष्ट करता है।
सुरुचिपूर्ण, न्यूनतर डिजाइन ने स्कीम को भाषा डिजाइनरों, शौकीनों और शिक्षकों के लिए एक लोकप्रिय लक्ष्य बना दिया है, और इसके छोटे आकार के कारण, एक विशिष्ट [[दुभाषिया (कंप्यूटिंग)]] के कारण, यह [[अंतः स्थापित प्रणाली]] और स्क्रिप्टिंग भाषा के लिए भी एक लोकप्रिय विकल्प है। इसके परिणामस्वरूप कार्यान्वयन के स्कोर हुए हैं,<ref name="scheme_implementations">योजना के 75 ज्ञात कार्यान्वयन द्वारा सूचीबद्ध हैं {{Cite web |date=2009-06-25 |title=योजना-अकसर किये गए सवाल|url=http://community.schemewiki.org/?scheme-faq-standards#implementations |access-date=2009-10-20 |publisher=Community Scheme Wiki}}</ref> जिनमें से अधिकांश एक दूसरे से इतने भिन्न हैं कि कार्यक्रमों को एक कार्यान्वयन से दूसरे कार्यान्वयन में पोर्ट करना काफी कठिन है, और मानक भाषा के छोटे आकार का अर्थ है कि मानक, पोर्टेबल योजना में किसी भी बड़ी जटिलता का एक उपयोगी कार्यक्रम लिखना लगभग असंभव।<ref name="position_paper" /> प्रोग्रामरों के लिए अपनी अपील को व्यापक बनाने के प्रयास में, आर6आरएस मानक बहुत व्यापक भाषा निर्दिष्ट करता है।


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


कुछ कार्यान्वयन अतिरिक्त सुविधाओं का समर्थन करते हैं। उदाहरण के लिए, [[कावा (योजना कार्यान्वयन)]] और [[JScheme]] जावा कक्षाओं के साथ एकीकरण प्रदान करते हैं, और योजना सी [[संकलक]] के लिए योजना अक्सर सी में लिखी गई बाहरी पुस्तकालयों का उपयोग करना आसान बनाती है, योजना स्रोत में वास्तविक सी कोड को एम्बेड करने की अनुमति देने तक। एक अन्य उदाहरण प्राइवेट है, जो योजना के सीखने का समर्थन करने के लिए दृश्य उपकरणों का एक सेट प्रदान करता है।
कुछ कार्यान्वयन अतिरिक्त सुविधाओं का समर्थन करते हैं। उदाहरण के लिए, [[कावा (योजना कार्यान्वयन)]] और [[JScheme]] जावा कक्षाओं के साथ एकीकरण प्रदान करते हैं, और योजना सी [[संकलक]] के लिए योजना अधिकांशतः सी में लिखी गई बाहरी पुस्तकालयों का उपयोग करना आसान बनाती है, योजना स्रोत में वास्तविक सी कोड को एम्बेड करने की अनुमति देने तक। एक अन्य उदाहरण प्राइवेट है, जो योजना के सीखने का समर्थन करने के लिए दृश्य उपकरणों का एक सेट प्रदान करता है।


== उपयोग ==
== उपयोग ==
योजना का व्यापक रूप से एक संख्या द्वारा उपयोग किया जाता है<ref name="schemers_inc">{{Cite web |last=Ed Martin |date=2009-07-20 |title=योजना का उपयोग करने वाले स्कूलों की सूची|url=http://www.schemers.com/schools.html |access-date=2009-10-20 |publisher=Schemers Inc.}}स्कूलों के </रेफरी>; विशेष रूप से, कई परिचयात्मक [[कंप्यूटर विज्ञान]] पाठ्यक्रम पाठ्यपुस्तक संरचना और कंप्यूटर प्रोग्राम की व्याख्या (SICP) के संयोजन में योजना का उपयोग करते हैं।<ref name="sicp_adopters">{{Cite web |date=1999-01-26 |title=एसआईसीपी-उपयोग करने वाले स्कूलों की सूची|url=http://mitpress.mit.edu/sicp/adopt-list.html |access-date=2009-10-20 |publisher=MIT Press}}</ref> पिछले 12 वर्षों से, [[रैकेट (प्रोग्रामिंग भाषा)]] ने [[ProgramByDesign]] (पूर्व में TeachScheme!) प्रोजेक्ट चलाया है, जिसने लगभग 600 हाई स्कूल के शिक्षकों और हजारों हाई स्कूल के छात्रों को अल्पविकसित योजना प्रोग्रामिंग के लिए उजागर किया है। [[MIT]] की पुरानी परिचयात्मक प्रोग्रामिंग कक्षा 6.001 को योजना में पढ़ाया गया था, रेफरी नाम = 6.001 >{{Cite web |last=Eric Grimson |author-link=Eric Grimson |date=Spring 2005 |title=6.001 कंप्यूटर प्रोग्राम की संरचना और व्याख्या|url=http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/CourseHome/index.htm |access-date=2009-10-20 |publisher=MIT Open Courseware}}</ref> हालांकि 6.001 को और अधिक आधुनिक पाठ्यक्रमों से बदल दिया गया है, SICP को MIT में पढ़ाया जाना जारी है।<ref name="6.001_zombies">{{Cite web |last=Alex Vandiver |last2=Nelson Elhage |display-authors=etal |date=January 2009 |title=6.184 - जॉम्बी कैफीन युक्त पेय 6.001|url=http://web.mit.edu/alexmv/6.001/ |access-date=2009-10-20 |publisher=MIT CSAIL}}</ रेफ> इसी तरह, यूसी बर्कले, सीएस 61ए में प्रारंभिक कक्षा, 2011 तक पूरी तरह से योजना में सिखाई गई थी, गतिशील दायरे को प्रदर्शित करने के लिए [[लोगो (प्रोग्रामिंग भाषा)]] में मामूली विचलन को बचाएं। आज, एमआईटी की तरह[[यूसी बरकेले]] ने पाठ्यक्रम को एक अधिक आधुनिक संस्करण के साथ बदल दिया है जो मुख्य रूप से [[पायथन (प्रोग्रामिंग भाषा)]] में पढ़ाया जाता है, लेकिन वर्तमान पाठ्यक्रम अभी भी पुराने पाठ्यक्रम पर आधारित है, और कक्षा के कुछ हिस्सों को अभी भी योजना में पढ़ाया जाता है। रेफरी नाम = 61ए >{{Cite web |last=John DeNero |date=Fall 2019 |title=कंप्यूटर साइंस 61A, बर्कले|url=https://cs61a.org/articles/about.html |access-date=2019-12-17 |publisher=Department of Electrical Engineering and Computer Sciences, Berkeley}}</रेफरी>
योजना का व्यापक रूप से एक संख्या द्वारा उपयोग किया जाता है<ref name="schemers_inc">{{Cite web |last=Ed Martin |date=2009-07-20 |title=योजना का उपयोग करने वाले स्कूलों की सूची|url=http://www.schemers.com/schools.html |access-date=2009-10-20 |publisher=Schemers Inc.}}स्कूलों के </रेफरी>; विशेष रूप से, कई परिचयात्मक [[कंप्यूटर विज्ञान]] पाठ्यक्रम पाठ्यपुस्तक संरचना और कंप्यूटर प्रोग्राम की व्याख्या (SICP) के संयोजन में योजना का उपयोग करते हैं।<ref name="sicp_adopters">{{Cite web |date=1999-01-26 |title=एसआईसीपी-उपयोग करने वाले स्कूलों की सूची|url=http://mitpress.mit.edu/sicp/adopt-list.html |access-date=2009-10-20 |publisher=MIT Press}}</ref> पिछले 12 वर्षों से, [[रैकेट (प्रोग्रामिंग भाषा)]] ने [[ProgramByDesign|प्रोग्रामबायडिजाइन]] (पूर्व में शिक्षण योजना!) परियोजना चलाया है, जिसने लगभग 600 हाई स्कूल के शिक्षकों और हजारों हाई स्कूल के छात्रों को अल्पविकसित योजना प्रोग्रामिंग के लिए उजागर किया है। [[MIT]] की पुरानी परिचयात्मक प्रोग्रामिंग कक्षा 6.001 को योजना में पढ़ाया गया था, रेफरी नाम = 6.001 >{{Cite web |last=Eric Grimson |author-link=Eric Grimson |date=Spring 2005 |title=6.001 कंप्यूटर प्रोग्राम की संरचना और व्याख्या|url=http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/CourseHome/index.htm |access-date=2009-10-20 |publisher=MIT Open Courseware}}</ref> हालांकि 6.001 को और अधिक आधुनिक पाठ्यक्रमों से बदल दिया गया है, SICP को MIT में पढ़ाया जाना जारी है।<ref name="6.001_zombies">{{Cite web |last=Alex Vandiver |last2=Nelson Elhage |display-authors=etal |date=January 2009 |title=6.184 - जॉम्बी कैफीन युक्त पेय 6.001|url=http://web.mit.edu/alexmv/6.001/ |access-date=2009-10-20 |publisher=MIT CSAIL}}</ रेफ> इसी तरह, यूसी बर्कले, सीएस 61ए में प्रारंभिक कक्षा, 2011 तक पूरी तरह से योजना में सिखाई गई थी, गतिशील दायरे को प्रदर्शित करने के लिए [[लोगो (प्रोग्रामिंग भाषा)]] में मामूली विचलन को बचाएं। आज, एमआईटी की तरह[[यूसी बरकेले]] ने पाठ्यक्रम को एक अधिक आधुनिक संस्करण के साथ बदल दिया है जो मुख्य रूप से [[पायथन (प्रोग्रामिंग भाषा)]] में पढ़ाया जाता है, लेकिन वर्तमान पाठ्यक्रम अभी भी पुराने पाठ्यक्रम पर आधारित है, और कक्षा के कुछ हिस्सों को अभी भी योजना में पढ़ाया जाता है। रेफरी नाम = 61ए >{{Cite web |last=John DeNero |date=Fall 2019 |title=कंप्यूटर साइंस 61A, बर्कले|url=https://cs61a.org/articles/about.html |access-date=2019-12-17 |publisher=Department of Electrical Engineering and Computer Sciences, Berkeley}}</रेफरी>


माथियास फेलिसन द्वारा पाठ्यपुस्तक [[प्रोग्राम कैसे डिजाइन करें]], वर्तमान में [[नॉर्थईस्टर्न विश्वविद्यालय]] में, उच्च शिक्षा के कुछ संस्थानों द्वारा उनके परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रमों के लिए उपयोग की जाती है। नॉर्थईस्टर्न यूनिवर्सिटी और [[वॉर्सेस्टर पॉलिटेक्निक संस्थान]] दोनों ही योजना का उपयोग विशेष रूप से उनके परिचयात्मक पाठ्यक्रम फंडामेंटल ऑफ कंप्यूटर साइंस (CS2500) और इंट्रोडक्शन टू प्रोग्राम डिजाइन (CS1101) के लिए करते हैं।
माथियास फेलिसन द्वारा पाठ्यपुस्तक [[प्रोग्राम कैसे डिजाइन करें]], वर्तमान में [[नॉर्थईस्टर्न विश्वविद्यालय]] में, उच्च शिक्षा के कुछ संस्थानों द्वारा उनके परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रमों के लिए उपयोग की जाती है। नॉर्थईस्टर्न यूनिवर्सिटी और [[वॉर्सेस्टर पॉलिटेक्निक संस्थान]] दोनों ही योजना का उपयोग विशेष रूप से उनके परिचयात्मक पाठ्यक्रम फंडामेंटल ऑफ कंप्यूटर साइंस (CS2500) और इंट्रोडक्शन टू प्रोग्राम डिजाइन (CS1101) के लिए करते हैं।
संदर्भ नाम = neu >[http://www.ccs.neu.edu/course/cs2500/ CS 2500: कंप्यूटर साइंस I के बुनियादी सिद्धांत], पूर्वोत्तर विश्वविद्यालय</ref><ref name="wpi">[http://web.cs.wpi.edu/~cs1101/a05/details.html#software CS 1101: Introduction to Program Design (A05): course software], [[Worcester Polytechnic Institute]]</ref> [[गुलाब-Hulman]] अपने अधिक उन्नत प्रोग्रामिंग लैंग्वेज कॉन्सेप्ट कोर्स में स्कीम का उपयोग करता है।<ref name="rhit">{{Cite web |title=CSSE 304: Programming Language Concepts |url=https://www.rose-hulman.edu/Users/faculty/young/CS-Classes/csse304/syllabus.html |publisher=[[Rose-Hulman Institute of Technology]]}}</ref> [[ब्रैंडिस विश्वविद्यालय]] का कोर कोर्स, स्ट्रक्चर एंड इंटरप्रिटेशन ऑफ कंप्यूटर प्रोग्राम्स (COSI121b), भी विशेष रूप से सैद्धांतिक कंप्यूटर वैज्ञानिक [[हैरी मैरसन]] द्वारा स्कीम में पढ़ाया जाता है।<ref name="brandeis">{{Cite web |title=Spring 2021 CS121b Syllabus |url=https://moodle2.brandeis.edu/syllabus/public/1202dcdfe19c0860e226f6447f66875c.pdf |publisher=[[Brandeis University]]}}</ref> [[इंडियाना विश्वविद्यालय]] की परिचयात्मक कक्षा, C211, पूरी तरह से स्कीम में पढ़ाई जाती है। पाठ्यक्रम का एक स्व-पुस्तक संस्करण, सीएस 61एएस, योजना का उपयोग करना जारी रखता है।<ref>{{cite web |url=https://berkeley-cs61as.github.io/ |title=Home |website=berkeley-cs61as.github.io}}</ref> [[येल]] और [[ग्रिनेल कॉलेज]] में परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रम भी स्कीम में पढ़ाए जाते हैं।<ref name="yale_cs201">{{Cite web |last=Dana Angluin |date=Fall 2009 |title=कंप्यूटर विज्ञान का परिचय (सीपीएससी 201)|url=http://zoo.cs.yale.edu/classes/cs201/ |access-date=2009-10-20 |publisher=The Zoo, Yale University Computer Science Department}}</रेफरी> प्रोग्रामिंग डिजाइन प्रतिमान, रेफरी नाम = neu2 >{{Cite web |date=Fall 2009 |title=प्रोग्रामिंग डिजाइन प्रतिमान CSG107 कोर्स रीडिंग|url=http://www.ccs.neu.edu/home/matthias/107-f08/readings.html |access-date=2012-08-09 |publisher=Northeastern University College of Computer and Information Science}}</रेफरी> पूर्वोत्तर विश्वविद्यालय में कंप्यूटर विज्ञान स्नातक छात्रों के लिए एक अनिवार्य पाठ्यक्रम भी व्यापक रूप से योजना का उपयोग करता है।
संदर्भ नाम = neu >[http://www.ccs.neu.edu/course/cs2500/ CS 2500: कंप्यूटर साइंस I के बुनियादी सिद्धांत], पूर्वोत्तर विश्वविद्यालय</ref><ref name="wpi">[http://web.cs.wpi.edu/~cs1101/a05/details.html#software CS 1101: Introduction to Program Design (A05): course software], [[Worcester Polytechnic Institute]]</ref> [[गुलाब-Hulman]] अपने अधिक उन्नत प्रोग्रामिंग लैंग्वेज कॉन्सेप्ट कोर्स में योजना का उपयोग करता है।<ref name="rhit">{{Cite web |title=CSSE 304: Programming Language Concepts |url=https://www.rose-hulman.edu/Users/faculty/young/CS-Classes/csse304/syllabus.html |publisher=[[Rose-Hulman Institute of Technology]]}}</ref> [[ब्रैंडिस विश्वविद्यालय]] का कोर कोर्स, स्ट्रक्चर एंड इंटरप्रिटेशन ऑफ कंप्यूटर प्रोग्राम्स (COSI121b), भी विशेष रूप से सैद्धांतिक कंप्यूटर वैज्ञानिक [[हैरी मैरसन]] द्वारा योजना में पढ़ाया जाता है।<ref name="brandeis">{{Cite web |title=Spring 2021 CS121b Syllabus |url=https://moodle2.brandeis.edu/syllabus/public/1202dcdfe19c0860e226f6447f66875c.pdf |publisher=[[Brandeis University]]}}</ref> [[इंडियाना विश्वविद्यालय]] की परिचयात्मक कक्षा, C211, पूरी तरह से योजना में पढ़ाई जाती है। पाठ्यक्रम का एक स्व-पुस्तक संस्करण, सीएस 61एएस, योजना का उपयोग करना जारी रखता है।<ref>{{cite web |url=https://berkeley-cs61as.github.io/ |title=Home |website=berkeley-cs61as.github.io}}</ref> [[येल]] और [[ग्रिनेल कॉलेज]] में परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रम भी योजना में पढ़ाए जाते हैं।<ref name="yale_cs201">{{Cite web |last=Dana Angluin |date=Fall 2009 |title=कंप्यूटर विज्ञान का परिचय (सीपीएससी 201)|url=http://zoo.cs.yale.edu/classes/cs201/ |access-date=2009-10-20 |publisher=The Zoo, Yale University Computer Science Department}}</रेफरी> प्रोग्रामिंग डिजाइन प्रतिमान, रेफरी नाम = neu2 >{{Cite web |date=Fall 2009 |title=प्रोग्रामिंग डिजाइन प्रतिमान CSG107 कोर्स रीडिंग|url=http://www.ccs.neu.edu/home/matthias/107-f08/readings.html |access-date=2012-08-09 |publisher=Northeastern University College of Computer and Information Science}}</रेफरी> पूर्वोत्तर विश्वविद्यालय में कंप्यूटर विज्ञान स्नातक छात्रों के लिए एक अनिवार्य पाठ्यक्रम भी व्यापक रूप से योजना का उपयोग करता है।
मिनेसोटा विश्वविद्यालय में पूर्व परिचयात्मक कंप्यूटर साइंस कोर्स - ट्विन सिटीज, CSCI 1901, ने भी अपनी प्राथमिक भाषा के रूप में स्कीम का उपयोग किया, इसके बाद एक कोर्स किया जिसने छात्रों को जावा प्रोग्रामिंग भाषा से परिचित कराया; संदर्भ नाम = umn >[http://www-users.itlabs.umn.edu/classes/Spring-2010/csci1901/ कंप्यूटर प्रोग्रामिंग I की संरचना] {{Webarchive|url=https://web.archive.org/web/20100619111110/http://www-users.itlabs.umn.edu/classes/Spring-2010/csci1901/# |date=2010-06-19 }}, कंप्यूटर विज्ञान विभाग, मिनेसोटा विश्वविद्यालय, स्प्रिंग 2010 (2010-01-30 तक पहुँचा)। </ रेफ> हालांकि, एमआईटी के उदाहरण के बाद, विभाग ने 1901 को पायथन-आधारित सीएससीआई 1133 के साथ बदल दिया, संदर्भ नाम= umn2 >[https://www.cs.umn.edu/academics/undergradu/curriculum/required CSci आवश्यक कक्षा पाठ्यक्रम विवरण और अन्य जानकारी] {{Webarchive|url=https://web.archive.org/web/20191025145152/https://www.cs.umn.edu/academics/undergraduate/curriculum/required |date=2019-10-25}}, कंप्यूटर विज्ञान विभाग, मिनेसोटा विश्वविद्यालय (2019-10-25 तक पहुँचा)</ref> जबकि कार्यात्मक प्रोग्रामिंग को तीसरे सेमेस्टर पाठ्यक्रम CSCI 2041 में विस्तार से शामिल किया गया है। संदर्भ नाम = umn3 >[https://www.csdy.umn.edu/~shield/csecc/मिनट/2013-4-23/csci2041.html CSCI 2041—नया पाठ्यक्रम] CSE पाठ्यचर्या समिति, मिनेसोटा विश्वविद्यालय (2019 में देखा गया) -10-25)</ref> सॉफ्टवेयर उद्योग में, [[टाटा कंसल्टेंसी सर्विसेज]], एशिया की सबसे बड़ी सॉफ्टवेयर कंसल्टेंसी फर्म, नए कॉलेज स्नातकों के लिए अपने महीने भर चलने वाले प्रशिक्षण कार्यक्रम में स्कीम का उपयोग करती है।{{citation needed|date=August 2013}}
मिनेसोटा विश्वविद्यालय में पूर्व परिचयात्मक कंप्यूटर साइंस कोर्स - ट्विन सिटीज, CSCI 1901, ने भी अपनी प्राथमिक भाषा के रूप में स्कीम का उपयोग किया, इसके बाद एक कोर्स किया जिसने छात्रों को जावा प्रोग्रामिंग भाषा से परिचित कराया; संदर्भ नाम = umn >[http://www-users.itlabs.umn.edu/classes/Spring-2010/csci1901/ कंप्यूटर प्रोग्रामिंग I की संरचना] {{Webarchive|url=https://web.archive.org/web/20100619111110/http://www-users.itlabs.umn.edu/classes/Spring-2010/csci1901/# |date=2010-06-19 }}, कंप्यूटर विज्ञान विभाग, मिनेसोटा विश्वविद्यालय, स्प्रिंग 2010 (2010-01-30 तक पहुँचा)। </ रेफ> हालांकि, एमआईटी के उदाहरण के बाद, विभाग ने 1901 को पायथन-आधारित सीएससीआई 1133 के साथ बदल दिया, संदर्भ नाम= umn2 >[https://www.cs.umn.edu/academics/undergradu/curriculum/required CSci आवश्यक कक्षा पाठ्यक्रम विवरण और अन्य जानकारी] {{Webarchive|url=https://web.archive.org/web/20191025145152/https://www.cs.umn.edu/academics/undergraduate/curriculum/required |date=2019-10-25}}, कंप्यूटर विज्ञान विभाग, मिनेसोटा विश्वविद्यालय (2019-10-25 तक पहुँचा)</ref> जबकि कार्यात्मक प्रोग्रामिंग को तीसरे सेमेस्टर पाठ्यक्रम CSCI 2041 में विस्तार से सम्मिलित किया गया है। संदर्भ नाम = umn3 >[https://www.csdy.umn.edu/~shield/csecc/मिनट/2013-4-23/csci2041.html CSCI 2041—नया पाठ्यक्रम] CSE पाठ्यचर्या समिति, मिनेसोटा विश्वविद्यालय (2019 में देखा गया) -10-25)</ref> सॉफ्टवेयर उद्योग में, [[टाटा कंसल्टेंसी सर्विसेज]], एशिया की सबसे बड़ी सॉफ्टवेयर कंसल्टेंसी फर्म, नए कॉलेज स्नातकों के लिए अपने महीने भर चलने वाले प्रशिक्षण कार्यक्रम में योजना का उपयोग करती है।
 
योजना का उपयोग निम्नलिखित के लिए भी किया गया है/किया गया था:
योजना का उपयोग निम्नलिखित के लिए भी किया गया है/किया गया था:


* द [[दस्तावेज़ शैली शब्दार्थ और विशिष्टता भाषा]] (DSSSL), जो [[SGML]] स्टाइल शीट (वेब ​​डेवलपमेंट) को निर्दिष्ट करने की एक विधि प्रदान करता है, एक स्कीम सबसेट का उपयोग करता है।<ref name="dsssl">{{Cite web |last=Robin Cover |date=2002-02-25 |title=DSSSL - Document Style Semantics and Specification Language. ISO/IEC 10179:1996 |url=http://xml.coverpages.org/dsssl.html |access-date=2012-08-09 |publisher=Cover Pages}}</ref>
* द [[दस्तावेज़ शैली शब्दार्थ और विशिष्टता भाषा]] (डीएसएसएसएल), जो [[SGML|एसजीएमएल]] स्टाइल शीट (वेब ​​डेवलपमेंट) को निर्दिष्ट करने की एक विधि प्रदान करता है, एक योजना सबसेट का उपयोग करता है।<ref name="dsssl">{{Cite web |last=Robin Cover |date=2002-02-25 |title=DSSSL - Document Style Semantics and Specification Language. ISO/IEC 10179:1996 |url=http://xml.coverpages.org/dsssl.html |access-date=2012-08-09 |publisher=Cover Pages}}</ref>
* जाने-माने [[खुला स्रोत सॉफ्टवेयर]] [[रेखापुंज ग्राफिक्स संपादक]] [[GIMP]] एक स्क्रिप्टिंग भाषा के रूप में [[TinyScheme]] का उपयोग करता है।<ref name="gimp">"''The major scripting language for the GIMP that has been attached to it today is Scheme.''" From {{Cite web |last=Dov Grobgeld |year=2002 |title=The GIMP Basic Scheme Tutorial |url=http://www.gimp.org/tutorials/Basic_Scheme/ |access-date=2012-08-09 |publisher=The GIMP Team}}</ref>
* जाने-माने [[खुला स्रोत सॉफ्टवेयर]] [[रेखापुंज ग्राफिक्स संपादक]] [[GIMP|जीआईएमपी]] एक स्क्रिप्टिंग भाषा के रूप में [[TinyScheme|छोटी योजना]] का उपयोग करता है।<ref name="gimp">"''The major scripting language for the GIMP that has been attached to it today is Scheme.''" From {{Cite web |last=Dov Grobgeld |year=2002 |title=The GIMP Basic Scheme Tutorial |url=http://www.gimp.org/tutorials/Basic_Scheme/ |access-date=2012-08-09 |publisher=The GIMP Team}}</ref>
* [[[[जीएनयू]] गुइल]] को जीएनयू प्रोजेक्ट द्वारा अपनी आधिकारिक स्क्रिप्टिंग भाषा के रूप में अपनाया गया है, और योजना का कार्यान्वयन एक्सटेंशन के लिए स्क्रिप्टिंग भाषा के रूप में जीएनयू लिलीपॉन्ड और जीएनयूकैश जैसे अनुप्रयोगों में एम्बेडेड है। इसी तरह, गाइल [[डेस्कटॉप वातावरण]] [[सूक्ति]] के लिए स्क्रिप्टिंग भाषा हुआ करती थी,<ref name="archive_gnomefaq">{{Cite web |last=Todd Graham Lewis |last2=David Zoll |last3=Julian Missig |year=2002 |title=इंटरनेट आर्काइव से गनोम एफएक्यू|url=http://www.gnome.org/gnomefaq/html/x930.html |archive-url=https://web.archive.org/web/20000522010523/http://www.gnome.org/gnomefaq/html/x930.html |archive-date=2000-05-22 |access-date=2012-08-09 |publisher=The Gnome Team, gnome.org}}</ref> और GNOME के ​​पास अभी भी एक प्रोजेक्ट है जो इसके लाइब्रेरी स्टैक को गुइल बाइंडिंग प्रदान करता है।<ref name="live_gnome">{{Cite web |title=छल-सूक्ति|url=https://www.gnu.org/software/guile-gnome/ |access-date=2012-08-09 |publisher=Free Software Foundation}}</ रेफ> मौजूदा [[Emacs लिस्प]] दुभाषिया की जगह, GNU के प्रमुख कार्यक्रम, [[GNU Emacs]] में Guile को शामिल करने की एक परियोजना है।{{Citation needed |reason=Where is the source? |date=May 2019 }}
* [[[[जीएनयू]] गुइल]] को जीएनयू परियोजना द्वारा अपनी आधिकारिक स्क्रिप्टिंग भाषा के रूप में अपनाया गया है, और योजना का कार्यान्वयन एक्सटेंशन के लिए स्क्रिप्टिंग भाषा के रूप में जीएनयू लिलीपॉन्ड और जीएनयूकैश जैसे अनुप्रयोगों में एम्बेडेड है। इसी तरह, गाइल [[डेस्कटॉप वातावरण]] [[सूक्ति]] के लिए स्क्रिप्टिंग भाषा हुआ करती थी,<ref name="archive_gnomefaq">{{Cite web |last=Todd Graham Lewis |last2=David Zoll |last3=Julian Missig |year=2002 |title=इंटरनेट आर्काइव से गनोम एफएक्यू|url=http://www.gnome.org/gnomefaq/html/x930.html |archive-url=https://web.archive.org/web/20000522010523/http://www.gnome.org/gnomefaq/html/x930.html |archive-date=2000-05-22 |access-date=2012-08-09 |publisher=The Gnome Team, gnome.org}}</ref> और गनोम के ​​पास अभी भी एक परियोजना है जो इसके लाइब्रेरी स्टैक को गुइल बाइंडिंग प्रदान करता है।<ref name="live_gnome">{{Cite web |title=छल-सूक्ति|url=https://www.gnu.org/software/guile-gnome/ |access-date=2012-08-09 |publisher=Free Software Foundation}}</ रेफ> मौजूदा [[Emacs लिस्प]] दुभाषिया की जगह, GNU के प्रमुख कार्यक्रम, [[GNU Emacs]] में Guile को शामिल करने की एक परियोजना है।{{Citation needed |reason=Where is the source? |date=May 2019 }}
* [[विस्तार भाषा किट]] का उपयोग [[Synopsys]] द्वारा इसकी [[प्रौद्योगिकी सीएडी]]|टेक्नोलॉजी CAD (TCAD) टूल्स के लिए एक स्क्रिप्टिंग भाषा के रूप में किया जाता है।<ref name="tcad">{{Cite web |last=Laurence Brevard |date=2006-11-09 |title=Synopsys MAP-in<sup>SM</sup> Program Update: EDA Interoperability Developers' Forum |url=http://www.synopsys.com/community/interoperability/documents/devforum_pres/2006nov/milkywaysession_mapin_overview.pdf |access-date=2012-08-09 |publisher=Synopsis Inc}}</ref>
*[[विस्तार भाषा किट]] का उपयोग [[Synopsys]] द्वारा इसकी [[प्रौद्योगिकी सीएडी]]|टेक्नोलॉजी CAD (TCAD) टूल्स के लिए एक स्क्रिप्टिंग भाषा के रूप में किया जाता है।<nowiki><ref name="tcad"></nowiki>{{Cite web |last=Laurence Brevard |date=2006-11-09 |title=Synopsys MAP-in<sup>SM</sup> Program Update: EDA Interoperability Developers' Forum |url=http://www.synopsys.com/community/interoperability/documents/devforum_pres/2006nov/milkywaysession_mapin_overview.pdf |access-date=2012-08-09 |publisher=Synopsis Inc}}</ref>
* फ़ाइनल फ़ैंटेसी: द स्पिरिट्स विदिन फ़िल्म के वरिष्ठ प्रोग्रामर शिरो कवाई ने रीयल-टाइम रेंडरिंग इंजन के प्रबंधन के लिए स्क्रिप्टिंग भाषा के रूप में स्कीम का उपयोग किया।<ref name="shiro_kawai">{{Cite journal |last=Kawai |first=Shiro |date=October 2002 |title=ग्लूइंग थिंग्स टुगेदर - स्कीम इन रियल-टाइम सीजी कंटेंट प्रोडक्शन|url=http://practical-scheme.net/docs/ILC2002.html |journal=Proceedings of the First International Lisp Conference, San Francisco |pages=342–348 |access-date=2012-08-09}}</रेफरी>
* फ़ाइनल फ़ैंटेसी: द स्पिरिट्स विदिन फ़िल्म के वरिष्ठ प्रोग्रामर शिरो कवाई ने रीयल-टाइम रेंडरिंग इंजन के प्रबंधन के लिए स्क्रिप्टिंग भाषा के रूप में योजना का उपयोग किया।<nowiki><ref name="shiro_kawai"></nowiki>{{Cite journal |last=कवाई |first=शिरो |date=अक्टूबर 2002 |title=ग्लूइंग थिंग्स टुगेदर - स्कीम इन रियल-टाइम सीजी कंटेंट प्रोडक्शन|url=http://practical-scheme.net/docs/ILC2002.html |journal=प्रथम अंतर्राष्ट्रीय लिस्प सम्मेलन, सैन फ्रांसिस्को की कार्यवाही |pages=342–348 |access-date=2012-08-09}}</रेफरी>
* एंड्रॉइड (ऑपरेटिंग सिस्टम) के लिए [[Google ऐप आविष्कारक]] योजना का उपयोग करता है, जहां कावा (योजना कार्यान्वयन) का उपयोग Android उपकरणों पर चलने वाली जावा वर्चुअल मशीन के लिए योजना कोड को बाइट-कोड में संकलित करने के लिए किया जाता है।
* एंड्रॉइड (ऑपरेटिंग सिस्टम) के लिए [[Google ऐप आविष्कारक]] योजना का उपयोग करता है, जहां कावा (योजना कार्यान्वयन) का उपयोग Android उपकरणों पर चलने वाली जावा वर्चुअल मशीन के लिए योजना कोड को बाइट-कोड में संकलित करने के लिए किया जाता है।
रेफरी नाम = एंड्रॉइड>{{Cite web |last=Bill Magnuson |last2=Hal Abelson |last3=Mark Friedman |name-list-style=amp |date=2009-08-11 |title=Android के लिए ऐप आविष्कारक के दायरे में|url=http://googleresearch.blogspot.com/2009/08/under-hood-of-app-inventor-for-android.html |access-date=2012-08-09 |publisher=Google Inc, Official Google Research blog}}</रेफरी>
रेफरी नाम = एंड्रॉइड>{{Cite web |last=Bill Magnuson |last2=Hal Abelson |last3=Mark Friedman |name-list-style=amp |date=2009-08-11 |title=Android के लिए ऐप आविष्कारक के दायरे में|url=http://googleresearch.blogspot.com/2009/08/under-hood-of-app-inventor-for-android.html |access-date=2012-08-09 |publisher=Google Inc, Official Google Research blog}}</रेफरी>

Revision as of 22:35, 23 February 2023

Scheme
Lambda lc.svg
ParadigmsMulti-paradigm: functional, imperative, meta
परिवारLisp
द्वारा डिज़ाइन किया गयाGuy L. Steele
Gerald Jay Sussman
पहली प्रस्तुति1975; 49 years ago (1975)
Stable release
R7RS / 2013; 11 years ago (2013)
टाइपिंग अनुशासनDynamic, latent, strong
स्कोपLexical
फ़ाइल नाम एक्सटेंशनएस.scm, .ss
वेबसाइटwww.scheme.org
Major implementations
Many
(see Scheme implementations)
Influenced by
ALGOL, Lisp, MDL
Influenced
Clojure, Common Lisp, Dylan, EuLisp, Haskell, Hop, JavaScript, Julia, Lua, MultiLisp, Python, R, Racket, Ruby, Rust, S, Scala, T

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

योजना की भाषा को आधिकारिक IEEE मानक में मानकीकृत किया गया है और एक वास्तविक मानक जिसे कलनविधि भाषा योजना (आरएनआरएस) पर संशोधित सूची कहा जाता हैn कलनविधि भाषा योजना (आरएनआरएस) पर सूची। एक व्यापक रूप से कार्यान्वित मानक आर5आरएस (1998) है।[2] योजना का सबसे हाल ही में स्वीकृत मानक आर7आरएस-छोटा (2013) है।[3] 2007 में अधिक विस्तृत और मॉड्यूलर आर6आरएस की पुष्टि की गई थी।[4] दोनों आर5आरएस से अपने वंश का पता लगाते हैं; नीचे दी गई समयरेखा अनुसमर्थन के कालानुक्रमिक क्रम को दर्शाती है।



इतिहास


उत्पत्ति

योजना 1970 के दशक में कार्ल हेविट के अभिनेता मॉडल को समझने के प्रयास के रूप में प्रारंभ हुई, जिसके लिए स्टील और सुस्मान ने Maclisp का उपयोग करके एक छोटा लिस्प दुभाषिया लिखा और फिर अभिनेता बनाने और संदेश भेजने के लिए तंत्र जोड़ा।[5] अन्य लिस्प (प्रोग्रामिंग भाषा)-व्युत्पन्न भाषाओं जैसे प्लानर (प्रोग्रामिंग भाषा) या कोनिवर की परंपरा में योजना को मूल रूप से स्कीमर कहा जाता था। वर्तमान नाम लेखकों के असंगत टाइमशेयरिंग सिस्टम के उपयोग से उत्पन्न हुआ है, जो फ़ाइल नामों को अधिकतम छह वर्णों के दो घटकों तक सीमित करता है। वर्तमान में, स्कीमर का उपयोग आमतौर पर योजना प्रोग्रामर को संदर्भित करने के लिए किया जाता है।

आर6आरएस

2006 में एक आर6आरएस मानक तैयार करने के लक्ष्य के साथ, 2003 की योजना कार्यशाला में एक नई भाषा मानकीकरण प्रक्रिया प्रारंभ हुई। यह प्रक्रिया एकमत के पहले के RnRS दृष्टिकोण से अलग हो गई।

आर6आरएस में एक मानक मॉड्यूल सिस्टम है, जो मूल भाषा और पुस्तकालयों के बीच विभाजन की अनुमति देता है। आर6आरएस विनिर्देशन के कई ड्राफ्ट जारी किए गए, अंतिम संस्करण R5.97RS था। एक सफल वोट के परिणामस्वरूप 28 अगस्त, 2007 को घोषित नए मानक का अनुसमर्थन हुआ।[4]

वर्तमान में विभिन्न योजना कार्यान्वयनों की नवीनतम रिलीज़[6] आर6आरएस मानक का समर्थन करता है। आर6आरएस के लिए प्रस्तावित निहित रूप से चरणबद्ध पुस्तकालयों का एक पोर्टेबल संदर्भ कार्यान्वयन है, जिसे वाक्य-विन्यास कहा जाता है, जो विभिन्न पुराने योजना कार्यान्वयनों पर खुद को ठीक से लोड और बूटस्ट्रैप करता है। रेफ नाम = वाक्य-विन्यास>Abdulaziz Ghuloum (2007-10-27). "R6RS लाइब्रेरी और सिंटैक्स-केस सिस्टम (साइंटैक्स)". Ikarus Scheme. Retrieved 2009-10-20.</रेफरी>

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

रेफरी>Keep, Andrew W.; Dybvig, R. Kent (November 2014). "स्कीम रिकॉर्ड प्रकारों का रन-टाइम प्रतिनिधित्व". Journal of Functional Programming. 24 (6): 675–716. doi:10.1017/S0956796814000203. S2CID 40001845.</रेफरी>

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

आर7आरएस

आर6आरएस मानक विवाद का कारण बना है क्योंकि कुछ इसे अतिसूक्ष्म दर्शन से प्रस्थान के रूप में देखते हैं।[8] अगस्त 2009 में, योजना संचालन समिति, जो मानकीकरण प्रक्रिया की देखरेख करती है, ने योजना को दो भाषाओं में विभाजित करने की सिफारिश करने की अपनी मंशा की घोषणा की: प्रोग्रामर के लिए एक बड़ी आधुनिक प्रोग्रामिंग भाषा; और एक छोटा संस्करण, बड़े संस्करण का एक उपसमुच्चय शिक्षकों और आकस्मिक कार्यान्वयनकर्ताओं द्वारा प्रशंसा की गई अतिसूक्ष्मवाद को बरकरार रखता है।[9] योजना के इन दो नए संस्करणों पर काम करने के लिए दो कार्यकारी समूह बनाए गए थे। योजना सूची प्रोसेस साइट में कार्य समूहों के चार्टर्स, सार्वजनिक चर्चाओं और ट्रैकिंग सिस्टम जारी करने के लिंक हैं।

आर7आरएस (छोटी भाषा) का नौवां मसौदा 15 अप्रैल, 2013 को उपलब्ध कराया गया था। रेफरी नाम= आर7आरएस-ड्राफ्ट-9 >"R7RS 9वां ड्राफ्ट उपलब्ध है" (PDF). 2013-04-15.</ref> इस मसौदे की पुष्टि करने वाला एक मत 20 मई 2013 को समाप्त हुआ,[10]


लैम्ब्डा कैलकुस

अलोंजो चर्च के गणितीय अंकन, लैम्ब्डा कैलकुस, ने लिस्प के लैम्ब्डा को एक प्रक्रिया प्रारंभ करने के लिए एक कीवर्ड के रूप में उपयोग करने के साथ-साथ लिस्प में उच्च-क्रम के कार्यों के उपयोग से जुड़े कार्यात्मक प्रोग्रामिंग विधियों के विकास को प्रभावित करने के लिए प्रेरित किया है। लेकिन प्रारंभिक लिस्प्स लैम्ब्डा कैलकुस के उपयुक्त अभिव्यक्ति नहीं थे क्योंकि मुक्त चर और बाध्य चर के उपचार के कारण।[5]

एक औपचारिक लैम्ब्डा प्रणाली में स्वयंसिद्ध और एक पूर्ण गणना नियम होता है। यह गणितीय तर्क और उपकरणों का उपयोग करके विश्लेषण के लिए सहायक है। इस प्रणाली में, गणना को दिशात्मक कटौती के रूप में देखा जा सकता है। लैम्ब्डा कैलकुलस का वाक्य-विन्यास x, y, z, ..., कोष्ठक, रिक्त स्थान, अवधि और प्रतीक λ से पुनरावर्ती अभिव्यक्तियों का अनुसरण करता है।[11] लैम्ब्डा गणना के कार्य में सम्मिलित हैं: सबसे पहले, शक्तिशाली गणितीय तर्क के प्रारंभिक बिंदु के रूप में कार्य करें। दूसरा, यह कार्यान्वयन विवरण पर विचार करने के लिए प्रोग्रामर की आवश्यकता को कम कर सकता है, क्योंकि इसका उपयोग मशीन मूल्यांकन की नकल करने के लिए किया जा सकता है। अंत में, लैम्ब्डा गणना ने एक पर्याप्त मेटा-थ्योरी बनाई।[12]

लेक्सिकल स्कोप की प्रारंभ ने लैम्ब्डा संकेतन के कुछ रूपों और कार्यशील प्रोग्रामिंग भाषा में उनकी व्यावहारिक अभिव्यक्ति के बीच समानता बनाकर समस्या का समाधान किया। सुस्मान और स्टील ने दिखाया कि नई भाषा का उपयोग एल्गोल और फोरट्रान सहित अन्य प्रोग्रामिंग भाषाओं के सभी अनिवार्य और घोषणात्मक शब्दार्थों को सुरुचिपूर्ण ढंग से प्राप्त करने के लिए किया जा सकता है, और लैम्ब्डा अभिव्यक्तियों का उपयोग करके अन्य लिस्प्स के गतिशील दायरे को सरल प्रक्रिया तात्कालिकता के रूप में नहीं बल्कि नियंत्रण संरचनाओं के रूप में उपयोग किया जा सकता है। और पर्यावरण संशोधक।[13]

योजना में, डेटा को मैनिपुलेट और बाइंड करने के लिए उपयोग किए जाने वाले समान प्रिमिटिव का उपयोग प्रक्रियाओं को बाइंड करने के लिए किया जा सकता है। सामान्य लिस्प के समकक्ष कोई नहीं है defun और #' आदिम।

<वाक्यविन्यास लैंग = योजना>

चर एक संख्या के लिए बाध्य

(एफ 10 परिभाषित करें) एफ ===> 10

उत्परिवर्तन (बाध्य मूल्य में परिवर्तन)

(सेट! एफ (+ एफ एफ 6)) एफ ===> 26

एक ही चर के लिए एक प्रक्रिया असाइन करना

(सेट! एफ (लैम्ब्डा (एन) (+ एन 12))) (एफ 6) ===> 18

एक ही चर के लिए एक अभिव्यक्ति का परिणाम निर्दिष्ट करना

(सेट! एफ (एफ 1)) एफ ===> 13

कार्यात्मक प्रोग्रामिंग

(प्रयुक्त करें + '(1 2 3 4 5 6)) ===> 21 (सेट! एफ (लैम्ब्डा (एन) (+ एन 100))) (नक्शा एफ '(1 2 3)) ===> (101 102 103) </वाक्यविन्यास हाइलाइट>

कार्यान्वयन मानक

यह उपखंड उन डिजाइन निर्णयों का दस्तावेजीकरण करता है जो वर्षों से लिए गए हैं जिन्होंने योजना को एक विशेष चरित्र दिया है, लेकिन मूल डिजाइन के प्रत्यक्ष परिणाम नहीं हैं।

संख्यात्मक टावर

योजना जटिल संख्या और परिमेय संख्या प्रकारों सहित संख्यात्मक डेटा प्रकारों के तुलनात्मक रूप से पूर्ण सेट को निर्दिष्ट करती है, जिसे योजना में संख्यात्मक टॉवर (आर5आरएस सेकंड 6.2) के रूप में जाना जाता है।[2]). मानक इन्हें सार के रूप में मानता है, और कार्यान्वयनकर्ता को किसी विशेष आंतरिक अभ्यावेदन के लिए प्रतिबद्ध नहीं करता है।

संख्याओं में स्पष्टता का गुण हो सकता है। एक स्पष्ट संख्या केवल स्पष्ट संचालन के अनुक्रम द्वारा उत्पादित की जा सकती है जिसमें अन्य स्पष्ट संख्याएं सम्मिलित हैं- इस प्रकार अक्षमता संक्रामक है। मानक निर्दिष्ट करता है कि किन्हीं भी दो कार्यान्वयनों को सभी परिचालनों के लिए समान परिणाम उत्पन्न करना चाहिए जिसके परिणामस्वरूप स्पष्ट संख्याएँ होती हैं।

आर5आरएस मानक प्रक्रियाओं को निर्दिष्ट करता है exact->inexact और inexact->exact जिसका उपयोग किसी संख्या की स्पष्टता को बदलने के लिए किया जा सकता है। inexact->exact स्पष्ट संख्या उत्पन्न करता है जो तर्क के संख्यात्मक रूप से निकटतम है। exact->inexact वह अचूक संख्या उत्पन्न करता है जो संख्यात्मक रूप से तर्क के निकटतम है। आर6आरएस मानक इन प्रक्रियाओं को मुख्य सूची से हटा देता है, लेकिन उन्हें मानक पुस्तकालय (rnrs आर5आरएस (6)) में आर5आरएस संगतता प्रक्रियाओं के रूप में निर्दिष्ट करता है।

आर5आरएस मानक में, पूरे संख्यात्मक टॉवर को प्रयुक्त करने के लिए योजना कार्यान्वयन की आवश्यकता नहीं है, लेकिन उन्हें कार्यान्वयन के उद्देश्यों और योजना की भाषा (आर5आरएस सेकंड 6.2.3) की भावना दोनों के अनुरूप एक सुसंगत सबसेट प्रयुक्त करना होगा।[2] नए आर6आरएस मानक को पूरे टॉवर के कार्यान्वयन की आवश्यकता होती है, और व्यावहारिक रूप से असीमित आकार और परिशुद्धता के स्पष्ट पूर्णांक ऑब्जेक्ट्स और स्पष्ट परिमेय संख्या ऑब्जेक्ट्स, और कुछ प्रक्रियाओं को प्रयुक्त करने के लिए ... इसलिए स्पष्ट तर्क दिए जाने पर वे हमेशा स्पष्ट परिणाम देते हैं (आर6आरएस सेकंड। 3.4, धारा 11.7.1)।[4]

उदाहरण 1: कार्यान्वयन में स्पष्ट अंकगणित जो स्पष्ट समर्थन करता है तर्कसंगत जटिल संख्या। <वाक्यविन्यास लैंग = योजना>

तीन परिमेय वास्तविक संख्याओं और दो परिमेय सम्मिश्र संख्याओं का योग

(एक्स परिभाषित करें (+ 1/3 1/4 -1/5 -1/3i 405/50+2/3i)) एक्स ===> 509/60+1/3i

स्पष्टता की जाँच करें।

(स्पष्ट? एक्स)

===> #टी

</वाक्यविन्यास हाइलाइट>

उदाहरण 2: कार्यान्वयन में वही अंकगणित जो न तो स्पष्ट समर्थन करता है परिमेय संख्याएँ और न ही सम्मिश्र संख्याएँ लेकिन परिमेय संकेतन में वास्तविक संख्याएँ स्वीकार करती हैं।

<वाक्यविन्यास लैंग = योजना>

चार परिमेय वास्तविक संख्याओं का योग

(एक्सआर परिभाषित करें (+ 1/3 1/4 -1/5 405/50))

दो परिमेय वास्तविक संख्याओं का योग

(xi परिभाषित करें (+ -1/3 2/3))

एक्सआर

===> 8.48333333333333

क्सी

===> 0.333333333333333

स्पष्टता की जाँच करें।

(स्पष्ट? एक्सआर) ===> #एफ (स्पष्ट? ग्यारहवीं)

===> #एफ

</वाक्यविन्यास हाइलाइट>

दोनों कार्यान्वयन आर5आरएस मानक के अनुरूप हैं लेकिन दूसरा आर6आरएस के अनुरूप नहीं है क्योंकि यह पूर्ण संख्यात्मक टावर को प्रयुक्त नहीं करता है।

विलंबित मूल्यांकन

योजना के माध्यम से विलंबित मूल्यांकन का समर्थन करता है delay प्रपत्र और प्रक्रिया force.

<वाक्यविन्यास लैंग = योजना> (10 परिभाषित करें) (eval-aplus2 को परिभाषित करें (विलंब (+ a 2))) (सेट! एक 20) (बल eval-aplus2) ===> 22 (eval-aplus50 परिभाषित करें (विलंब (+ a 50))) (चलो ((एक 8))

 (बल eval-aplus50))

===> 70 (सेट! एक 100) (बल eval-aplus2) ===> 22 </वाक्यविन्यास हाइलाइट> वादे की मूल परिभाषा का शाब्दिक संदर्भ संरक्षित है, और इसका मूल्य पहले उपयोग के बाद भी संरक्षित है force. वादा केवल एक बार मूल्यांकन किया जाता है।

ये प्रिमिटिव, जो फ़्यूचर्स और वादों के रूप में जाने जाने वाले मूल्यों का उत्पादन या संचालन करते हैं, का उपयोग उन्नत आलसी मूल्यांकन निर्माणों जैसे स्ट्रीम (कंप्यूटिंग) को प्रयुक्त करने के लिए किया जा सकता है।[14]

आर6आरएस मानक में, ये अब आदिम नहीं हैं, बल्कि इसके अतिरिक्त, आर5आरएस संगतता लाइब्रेरी (rnrs आर5आरएस (6)) के हिस्से के रूप में प्रदान किए जाते हैं।

आर5आरएस में, के कार्यान्वयन का सुझाव दिया delay और force दिया गया है, वादे को बिना किसी तर्क (एक थंक) के एक प्रक्रिया के रूप में प्रयुक्त करना और यह सुनिश्चित करने के लिए memoization का उपयोग करना कि यह केवल एक बार मूल्यांकन किया जाता है, चाहे कितनी भी बार force कहा जाता है (आर5आरएस सेकंड। 6.4)।[2]

एसआरएफआई 41 असाधारण अर्थव्यवस्था के साथ परिमित और अनंत दोनों अनुक्रमों की अभिव्यक्ति को सक्षम बनाता है। उदाहरण के लिए, यह एसआरएफआई 41 में परिभाषित कार्यों का उपयोग करके फाइबोनैचि संख्या की परिभाषा है:[14]

<वाक्यविन्यास लैंग = योजना>

फाइबोनैचि अनुक्रम को परिभाषित करें

(फाइब को परिभाषित करें

 (धारा-विपक्ष 0
   (धारा-विपक्ष 1
     (स्ट्रीम-मैप +
       फाइबर
       (स्ट्रीम-सीडीआर फ़ाइब)))))
क्रम में सौवीं संख्या की गणना करें

(स्ट्रीम-रेफ फाइबर 99) ===> 218922995834555169026 </वाक्यविन्यास हाइलाइट>

प्रक्रिया तर्कों के मूल्यांकन का क्रम

अधिकांश लिस्प्स प्रक्रिया तर्कों के मूल्यांकन के क्रम को निर्दिष्ट करते हैं। योजना नहीं है। मूल्यांकन का क्रम - जिसमें ऑपरेटर की स्थिति में अभिव्यक्ति का मूल्यांकन किया जाता है - कॉल-बाय-कॉल के आधार पर एक कार्यान्वयन द्वारा चुना जा सकता है, और एकमात्र बाधा यह है कि ऑपरेटर और ऑपरेंड के समवर्ती मूल्यांकन का प्रभाव अभिव्यक्ति मूल्यांकन के कुछ अनुक्रमिक क्रम के अनुरूप होने के लिए विवश है। (आर5आरएस सेकंड। 4.1.3)[2]<वाक्यविन्यास लैंग = योजना> (चलो ((ईवी (लैम्ब्डा (एन)) (मूल्यांकन प्रदर्शित करें)

                    (प्रदर्शन (यदि (प्रक्रिया? एन) प्रक्रिया एन))
                    (न्यूलाइन) एन)))
 ((ईवी +) (ईवी 1) (ईवी 2)))

===> 3 </वाक्यविन्यास हाइलाइट> <वाक्यविन्यास प्रकाश लैंग = आउटपुट> मूल्यांकन 1 मूल्यांकन 2 मूल्यांकन प्रक्रिया </वाक्यविन्यास हाइलाइट> ev एक ऐसी प्रक्रिया है जो इसे दिए गए तर्क का वर्णन करती है, फिर तर्क का मान लौटाती है। अन्य लिस्प्स के विपरीत, एक योजना अभिव्यक्ति की ऑपरेटर स्थिति (पहली वस्तु) में एक अभिव्यक्ति की उपस्थिति काफी कानूनी है, जब तक कि ऑपरेटर की स्थिति में अभिव्यक्ति का परिणाम एक प्रक्रिया है।

प्रक्रिया को बुलाने में+1 और 2, भाव जोड़ने के लिए (ev +), (ev 1) और (ev 2) किसी भी क्रम में मूल्यांकन किया जा सकता है, जब तक कि प्रभाव ऐसा न हो जैसे कि उनका मूल्यांकन समानांतर में किया गया हो। इस प्रकार निम्नलिखित तीन पंक्तियों को किसी भी क्रम में मानक योजना द्वारा प्रदर्शित किया जा सकता है जब उपरोक्त उदाहरण कोड निष्पादित किया जाता है, हालांकि एक पंक्ति का पाठ दूसरे के साथ अंतःस्थापित नहीं किया जा सकता है क्योंकि यह अनुक्रमिक मूल्यांकन बाधा का उल्लंघन करेगा।

स्वच्छ मैक्रोज़

आर5आरएस मानक में और बाद की सूची में भी, योजना के वाक्य-विन्यास को मैक्रो सिस्टम के माध्यम से सरलता से बढ़ाया जा सकता है। आर5आरएस मानक ने एक शक्तिशाली हाइजीनिक मैक्रो सिस्टम प्रस्तुत किया जो प्रोग्रामर को एक सरल पैटर्न मिलान उपभाषा (आर5आरएस sec 4.3) का उपयोग करके भाषा में नए वाक्यात्मक निर्माण जोड़ने की अनुमति देता है।[2] इससे पहले, हाइजीनिक मैक्रो सिस्टम को R4RS मानक के परिशिष्ट के रूप में निम्न स्तर मैक्रो सिस्टम के साथ एक उच्च स्तरीय सिस्टम के रूप में हटा दिया गया था, दोनों को भाषा के एक अनिवार्य भाग के अतिरिक्त योजना के विस्तार के रूप में माना जाता था।[15] हाइजेनिक मैक्रो सिस्टम के कार्यान्वयन को भी कहा जाता है syntax-rules, शेष भाषा के शाब्दिक दायरे का सम्मान करना आवश्यक है। मैक्रो विस्तार के लिए विशेष नामकरण और स्कोपिंग नियमों द्वारा यह आश्वासन दिया गया है और सामान्य प्रोग्रामिंग त्रुटियों से बचा जाता है जो अन्य प्रोग्रामिंग भाषाओं के मैक्रो सिस्टम में हो सकती हैं। आर6आरएस एक अधिक परिष्कृत परिवर्तन प्रणाली निर्दिष्ट करता है, syntax-case, जो कुछ समय के लिए आर5आरएस योजना के भाषा विस्तार के रूप में उपलब्ध है।

<वाक्यविन्यास लैंग = योजना>

बहु-अभिव्यक्ति वाले if के भिन्नरूप को प्रयुक्त करने के लिए मैक्रो को परिभाषित करें
सच्ची शाखा और कोई झूठी शाखा नहीं।

(परिभाषित-वाक्यविन्यास कब

 (वाक्यविन्यास-नियम ()
   ((जब पूर्व ऍक्स्प ऍक्स्प ...)
     (अगर पूर्व (प्रारंभ ऍक्स्प ऍक्स्प्स ...)))))

</वाक्यविन्यास हाइलाइट>

मैक्रोज़ और प्रक्रियाओं के आह्वान में घनिष्ठ समानता होती है - दोनों एस-एक्सप्रेशन हैं - लेकिन उनका अलग तरह से व्यवहार किया जाता है। जब कंपाइलर प्रोग्राम में एस-एक्सप्रेशन का सामना करता है, तो यह पहले यह देखने के लिए जांच करता है कि प्रतीक को वर्तमान लेक्सिकल स्कोप के भीतर सिंटैक्टिक कीवर्ड के रूप में परिभाषित किया गया है या नहीं। यदि ऐसा है, तो यह मैक्रो का विस्तार करने का प्रयास करता है, एस-एक्सप्रेशन की पूंछ में आइटमों का मूल्यांकन करने के लिए कोड को संकलित किए बिना तर्क के रूप में व्यवहार करता है, और यह प्रक्रिया पुनरावर्ती रूप से दोहराई जाती है जब तक कि कोई मैक्रो इनवोकेशन नहीं रहता। यदि यह एक सिंटैक्टिक कीवर्ड नहीं है, तो कंपाइलर एस-एक्सप्रेशन की पूंछ में तर्कों का मूल्यांकन करने के लिए कोड संकलित करता है और फिर एस-एक्सप्रेशन के शीर्ष पर प्रतीक द्वारा दर्शाए गए चर का मूल्यांकन करता है और इसे एक प्रक्रिया के रूप में कॉल करता है मूल्यांकित टेल एक्सप्रेशंस इसे वास्तविक तर्क के रूप में पारित किया गया।

अधिकांश योजना कार्यान्वयन अतिरिक्त मैक्रो सिस्टम भी प्रदान करते हैं। लोकप्रिय लोगों में हाइजीनिक मैक्रो#सिंटैक्टिक क्लोजर, हाइजीनिक मैक्रो#एक्सप्लिसिट रीनेमिंग और हैं define-macro, एक गैर-स्वच्छ मैक्रो प्रणाली के समान defmacro सामान्य लिस्प में प्रदान की गई प्रणाली।

मैक्रो स्वच्छ है या नहीं, यह निर्दिष्ट करने में असमर्थता मैक्रो सिस्टम की कमियों में से एक है। विस्तार के लिए वैकल्पिक मॉडल जैसे स्कोप सेट एक संभावित समाधान प्रदान करते हैं।[16]


पर्यावरण और eval

आर5आरएस से पहले, योजना का कोई मानक समकक्ष नहीं था eval प्रक्रिया जो अन्य लिस्प्स में सर्वव्यापी है, हालांकि पहले लैम्ब्डा पेपर ने वर्णित किया था evaluate LISP फ़ंक्शन EVAL के समान[17]और 1978 में पहली संशोधित सूची ने इसे बदल दिया enclose, जिसने दो तर्क लिए। दूसरी, तीसरी और चौथी संशोधित सूची में किसी भी समकक्ष को छोड़ दिया गया eval.

इस भ्रम का कारण यह है कि योजना में इसके शाब्दिक दायरे के साथ एक अभिव्यक्ति का मूल्यांकन करने का परिणाम इस बात पर निर्भर करता है कि इसका मूल्यांकन कहाँ किया जाता है। उदाहरण के लिए, यह स्पष्ट नहीं है कि निम्नलिखित अभिव्यक्ति का मूल्यांकन करने का परिणाम 5 या 6 होना चाहिए:[18] <वाक्यविन्यास लैंग = योजना> (चलो ((नाम '+))

 (चलो ((+ *))
   (मूल्यांकन करें (सूची का नाम 2 3))))

</वाक्यविन्यास हाइलाइट>

यदि बाहरी वातावरण में इसका मूल्यांकन किया जाता है, जहां name परिभाषित किया गया है, परिणाम ऑपरेंड का योग है। यदि इसका मूल्यांकन आंतरिक वातावरण में किया जाता है, जहां प्रतीक + को प्रक्रिया * के मान के लिए बाध्य किया गया है, परिणाम दो ऑपरेंड का उत्पाद है।

आर5आरएस वातावरण लौटाने वाली तीन प्रक्रियाओं को निर्दिष्ट करके और एक प्रक्रिया प्रदान करके इस भ्रम को हल करता है eval जो एक एस-अभिव्यक्ति और एक वातावरण लेता है और प्रदान किए गए वातावरण में अभिव्यक्ति का मूल्यांकन करता है। (आर5आरएस सेकंड 6.5)[2] आर6आरएस नामक एक प्रक्रिया प्रदान करके इसे विस्तारित करता है environment जिसके द्वारा प्रोग्रामर स्पष्ट रूप से निर्दिष्ट कर सकता है कि मूल्यांकन वातावरण में किन वस्तुओं को आयात करना है।

इस अभिव्यक्ति का मूल्यांकन करने के लिए आधुनिक योजना (आमतौर पर आर5आरएस के साथ संगत) के साथ, एक फ़ंक्शन को परिभाषित करने की आवश्यकता होती है evaluate जो इस तरह दिख सकता है:

<वाक्यविन्यास लैंग = योजना> (परिभाषित करें (एक्सपीआर का मूल्यांकन करें)

  (eval expr (बातचीत-पर्यावरण)))

</वाक्यविन्यास हाइलाइट>

interaction-environment दुभाषिया का वैश्विक वातावरण है।

बूलियन अभिव्यक्तियों में गैर-बूलियन मूल्यों का उपचार

सामान्य लिस्प सहित लिस्प की अधिकांश बोलियों में, सम्मेलन द्वारा मूल्य NIL बूलियन व्यंजक में गलत मान का मूल्यांकन करता है। योजना में, 1991 में IEEE मानक के बाद से,[19]सभी मूल्यों को छोड़कर #f, सम्मिलित NILयोजना में समकक्ष जो इस रूप में लिखा गया है '(), बूलियन व्यंजक में सही मान का मूल्यांकन करें। (आर5आरएस सेकंड। 6.3.1)[2]

जहां सत्य के बूलियन मान का प्रतिनिधित्व करने वाला स्थिरांक है T अधिकांश लिस्प्स में, योजना में यह है #t.

आदिम डेटाटाइप्स की विसंगति

योजना में आदिम डेटाटाइप अलग हैं। निम्न में से केवल एक विधेय किसी भी योजना वस्तु के लिए सही हो सकता है: boolean?, pair?, symbol?, number?, char?, string?, vector?, port?, procedure?. (आर5आरएस सेकंड 3.2)[2]

संख्यात्मक डेटा प्रकार के भीतर, इसके विपरीत, संख्यात्मक मान ओवरलैप होते हैं। उदाहरण के लिए, एक पूर्णांक मान सभी को संतुष्ट करता है integer?, rational?, real?, complex? और number? एक ही समय में भविष्यवाणी करता है। (आर5आरएस सेकंड 6.2)[2]


तुल्यता विधेय करती है

योजना में तीन अलग-अलग समतुल्य वस्तुओं के बीच तीन अलग-अलग प्रकार की तुल्यता है, जो तीन अलग-अलग तुल्यता विधेय, समानता के परीक्षण के लिए संबंधपरक संचालकों द्वारा निरूपित की जाती है, eq?, eqv? और equal?:

  • eq? का मूल्यांकन करता है #f जब तक इसके पैरामीटर स्मृति में समान डेटा ऑब्जेक्ट का प्रतिनिधित्व नहीं करते;
  • eqv? आम तौर पर जैसा ही होता है eq? लेकिन आदिम वस्तुओं (जैसे वर्ण और संख्या) को विशेष रूप से व्यवहार करता है ताकि समान मान का प्रतिनिधित्व करने वाली संख्याएँ हों eqv? भले ही वे एक ही वस्तु का उल्लेख न करते हों;
  • equal? यह निर्धारित करने के लिए डेटा संरचनाओं जैसे सूचियों, वैक्टर और स्ट्रिंग्स की तुलना करता है कि क्या उनके पास सर्वांगसम संरचना है और eqv? सामग्री। (आर5आरएस सेकंड। 6.1)[2]

योजना में प्रकार पर निर्भर तुल्यता संचालन भी मौजूद हैं: string=? और string-ci=? दो स्ट्रिंग्स की तुलना करें (उत्तरार्द्ध केस-स्वतंत्र तुलना करता है); char=? और char-ci=? पात्रों की तुलना करें; = संख्याओं की तुलना करता है।[2]


टिप्पणियाँ

आर5आरएस मानक तक, योजना में मानक टिप्पणी अर्धविराम थी, जो शेष रेखा को योजना के लिए अदृश्य बना देती है। कई कार्यान्वयनों ने वैकल्पिक सम्मेलनों का समर्थन किया है जो टिप्पणियों को एक पंक्ति से अधिक विस्तारित करने की अनुमति देते हैं, और आर6आरएस मानक उनमें से दो को अनुमति देता है: एक संपूर्ण एस-अभिव्यक्ति को #; के साथ पूर्ववर्ती करके एक टिप्पणी (या "टिप्पणी आउट") में बदल दिया जा सकता है # एक संपूर्ण एस-अभिव्यक्ति को एक टिप्पणी (या टिप्पणी की गई) में बदल दिया जा सकता है, इसके पहले (एसआरएफआई 62 में प्रस्तुत किया गया[20]) और एक बहुपंक्ति टिप्पणी #| या ब्लॉक टिप्पणी |# आसपास के पाठ द्वारा निर्मित की जा सकती है।

इनपुट/आउटपुट

योजना का इनपुट और आउटपुट पोर्ट डेटाटाइप पर आधारित है। (आर5आरएस सेकंड 6.6)[2] आर5आरएस प्रक्रियाओं के साथ दो डिफ़ॉल्ट पोर्ट current-input-port और current-output-port को परिभाषित करता है, जो मानक धाराओं की यूनिक्स धारणाओं के अनुरूप है। अधिकांश कार्यान्वयन current-error-port भी प्रदान करते हैं, इनपुट और मानक आउटपुट का पुनर्निर्देशन (कंप्यूटिंग) मानक प्रक्रियाओं जैसे कि with-input-from-file और with-output-to-file मानक में समर्थित है। अधिकांश कार्यान्वयन समान पुनर्निर्देशन क्षमताओं के साथ स्ट्रिंग पोर्ट प्रदान करते हैं, एसआरएफआई 6 में वर्णित प्रक्रियाओं का उपयोग करते हुए, फाइलों के अतिरिक्त स्ट्रिंग बफ़र्स पर कई सामान्य इनपुट-आउटपुट संचालन को सक्षम करते हैं।[21] आर6आरएस मानक बहुत अधिक परिष्कृत और सक्षम बंदरगाह प्रक्रियाओं और कई नए प्रकार के बंदरगाहों को निर्दिष्ट करता है।

निम्नलिखित उदाहरण कठोर आर5आरएस योजना में लिखे गए हैं।

उदाहरण 1: आउटपुट डिफ़ॉल्ट (वर्तमान-आउटपुट-पोर्ट) के साथ:

(let ((hello0 (lambda() (display "Hello world") (newline))))

(hello0))

उदाहरण 2: 1 के रूप में, लेकिन आउटपुट प्रक्रियाओं के लिए वैकल्पिक पोर्ट तर्क का उपयोग करना

(let ((hello1 (lambda (p) (display "Hello world" p) (newline p))))

(hello1 (current-output-port)))

उदाहरण 3: 1 के रूप में, लेकिन आउटपुट को नई बनाई गई फ़ाइल पर पुनर्निर्देशित किया जाता है

;; NB: with-output-to-file is an optional procedure in R5RS

(let ((hello0 (lambda () (display "Hello world") (newline))))

(with-output-to-file "helloworldoutputfile" hello0))

एनबी
आउटपुट-टू-फाइल के साथ आर5आरएस में एक वैकल्पिक प्रक्रिया है

(चलो ((हैलो0 (लैम्ब्डा () (हैलो वर्ल्ड प्रदर्शित करें) (न्यूलाइन))))

 (साथ-आउटपुट-टू-फाइल helloworldoutputfile hello0))

</वाक्यविन्यास हाइलाइट>

उदाहरण 4:2 के रूप में, लेकिन फ़ाइल में आउटपुट भेजने के लिए स्पष्ट फ़ाइल खुली और बंदरगाह बंद है

<वाक्यविन्यास लैंग = योजना>

(let ((hello1 (lambda (p) (display "Hello world" p) (newline p)))

    (output-port (open-output-file "helloworldoutputfile")))
  (hello1 output-port)
  (close-output-port output-port))

</वाक्यविन्यास हाइलाइट>

उदाहरण 5: 2 के रूप में, लेकिन फ़ाइल में आउटपुट भेजने के लिए कॉल-विद-आउटपुट-फाइल का उपयोग करने के साथ।

<वाक्यविन्यास लैंग = योजना>

(let ((hello1 (lambda (p) (display "Hello world" p) (newline p))))

 (call-with-output-file "helloworldoutputfile" hello1))

</वाक्यविन्यास हाइलाइट>

इनपुट के लिए समान प्रक्रियाएं प्रदान की जाती हैं। आर5आरएस योजना विधेय input-port? और output-port? प्रदान करती है। चरित्र इनपुट और आउटपुट के लिए, write-char, read-char, peek-char और char-ready? उपलब्ध कराए गए हैं। योजना के भाव लिखने और पढ़ने के लिए, write और read योजना प्रदान करती है। रीड ऑपरेशन पर, यदि इनपुट पोर्ट फ़ाइल के अंत तक पहुँच गया है, तो लौटाया गया परिणाम फ़ाइल का अंत है, और इसे विधेय eof-object? का उपयोग करके परीक्षण किया जा सकता है।

मानक के अतिरिक्त, एसआरएफआई 28 सामान्य लिस्प के समान एक मूलभूत स्वरूपण प्रक्रिया को परिभाषित करता है, जिसके बाद इसका नाम format कार्य दिया गया है।[22]


मानक प्रक्रियाओं की पुनर्व्याख्या

योजना में, प्रक्रियाएं चर के लिए बाध्य हैं। आर5आरएस में भाषा मानक औपचारिक रूप से अनिवार्य है कि कार्यक्रम अंतर्निहित प्रक्रियाओं के चर बंधनों को बदल सकते हैं, उन्हें प्रभावी ढंग से पुनर्परिभाषित कर सकते हैं। आर5आरएस भाषा परिवर्तन,[2] उदाहरण के लिए, स्ट्रिंग्स के साथ-साथ संख्याओं को फिर से परिभाषित करके स्वीकार करने के लिए + का विस्तार किया जा सकता है:

<वाक्यविन्यास लैंग = योजना>

     (set! +
      (let ((original+ +))
        (lambda args
          (apply (if (or (null? args) (string? (car args)))
                     string-append
                     original+)
                 args))))
(+ 1 2 3)
===> 6
(+ "1" "2" "3")
===> "123"

आर6आरएस (आर6आरएस सेकंड 7.1) में मानक सहित प्रत्येक बंधन, कुछ पुस्तकालय से संबंधित है, और सभी निर्यातित बंधन अपरिवर्तनीय हैं।[4] इस कारण से, उत्परिवर्तन द्वारा मानक प्रक्रियाओं को पुनर्परिभाषित करना प्रतिबंधित है। इसके अतिरिक्त, एक मानक प्रक्रिया के नाम से एक अलग प्रक्रिया आयात करना संभव है, जो वास्तव में पुनर्वितरण के समान है।

नामकरण और नामकरण परंपराएं

मानक योजना में, एक डेटाटाइप से दूसरे डेटाटाइप में परिवर्तित होने वाली प्रक्रियाओं में वर्ण स्ट्रिंग होती है -> उनके नाम पर, एक के साथ समाप्त होने की भविष्यवाणी करता है? , और प्रक्रियाएँ जो पहले से आवंटित डेटा के मान को बदल देती हैं, के साथ समाप्त हो जाती हैं ! . इन सम्मेलनों का अधिकांशतः योजना प्रोग्रामर द्वारा पालन किया जाता है।

योजना मानकों जैसे औपचारिक संदर्भों में, लैम्ब्डा अभिव्यक्ति या आदिम प्रक्रिया को संदर्भित करने के लिए कार्य करने के लिए शब्द प्रक्रिया का उपयोग वरीयता में किया जाता है। सामान्य उपयोग में, शब्द प्रक्रिया और कार्य परस्पर विनिमय के लिए उपयोग किए जाते हैं। प्रक्रिया आवेदन को कभी-कभी औपचारिक रूप से संयोजन के रूप में संदर्भित किया जाता है।

अन्य लिस्प्स की तरह, थंक शब्द का उपयोग योजना में बिना किसी तर्क के एक प्रक्रिया को संदर्भित करने के लिए किया जाता है। प्रॉपर टेल रिकर्सन शब्द सभी योजना कार्यान्वयनों की संपत्ति को संदर्भित करता है, कि वे टेल-कॉल ऑप्टिमाइज़ेशन करते हैं ताकि सक्रिय टेल कॉल की अनिश्चित संख्या का समर्थन किया जा सके।

आर3आरएस, संशोधित के बाद से मानकों के दस्तावेजों के शीर्षक का रूप एल्गोरिथम भाषा योजना पर सूची, एल्गोल मानक दस्तावेज़ के शीर्षक का एक संदर्भ है, एल्गोरिद्मिक भाषा एल्गोल 60 पर संशोधित सूची, आर3आरएस का सारांश पृष्ठ एल्गोल 60 सूची के सारांश पृष्ठ पर बारीकी से तैयार किया गया है .Cite error: Closing </ref> missing for <ref> tag


मानक रूपों और प्रक्रियाओं की समीक्षा

भाषा को औपचारिक रूप से मानकों आर5आरएस (1998) और आर6आरएस (2007) में परिभाषित किया गया है। वे मानक रूपों का वर्णन करते हैं: कीवर्ड और संबंधित वाक्य-विन्यास, जो भाषा की नियंत्रण संरचना प्रदान करते हैं, और मानक प्रक्रियाएं जो सामान्य कार्य करती हैं।

मानक रूप

यह तालिका योजना में मानक रूपों का वर्णन करती है। कुछ रूप एक से अधिक पंक्तियों में दिखाई देते हैं क्योंकि उन्हें सरलता से भाषा में एक ही कार्य में वर्गीकृत नहीं किया जा सकता है।

इस तालिका में एल चिह्नित रूपों को मानक में व्युत्पन्न पुस्तकालय रूपों के रूप में वर्गीकृत किया गया है और अधिकांशतः अभ्यास में अधिक मौलिक रूपों का उपयोग करके मैक्रोज़ के रूप में कार्यान्वित किया जाता है, जिससे कार्यान्वयन का कार्य अन्य भाषाओं की तुलना में अधिक आसान हो जाता है।

भाषा आर5आरएस योजना में मानक प्रपत्र
उद्देश्य फॉर्म
परिभाषा define
बाध्यकारी संरचनाएं lambda, do (L), let (L), let* (L), letrec (L)
सशर्त मूल्यांकन if, cond (L), case (L), and (L), or (L)
अनुक्रमिक मूल्यांकन begin (*)
पुनरावृत्ति lambda, do (L), named let (L)
वाक्यात्मक विस्तार define-syntax, let-syntax, letrec-syntax, syntax-rules (R5RS), syntax-case (R6RS)
उद्धरण quote('), unquote(,), quasiquote(`), unquote-splicing(,@)
नियत कार्य set!
विलंबित मूल्यांकन delay (L)

ध्यान दें कि begin आर5आरएस में लाइब्रेरी वाक्य-विन्यास के रूप में परिभाषित किया गया है, लेकिन विस्तारक को स्प्लिसिंग कार्यक्षमता प्राप्त करने के लिए इसके बारे में जानना आवश्यक है। आर6आरएस में यह अब लाइब्रेरी वाक्य-विन्यास नहीं है।

मानक प्रक्रियाएं

निम्नलिखित दो तालिकाएँ आर5आरएस योजना में मानक प्रक्रियाओं का वर्णन करती हैं। आर6आरएस कहीं अधिक व्यापक है और इस प्रकार का सारांश व्यावहारिक नहीं होगा।

कुछ प्रक्रियाएँ एक से अधिक पंक्तियों में दिखाई देती हैं क्योंकि उन्हें सरलता से भाषा में एक ही कार्य में वर्गीकृत नहीं किया जा सकता है।

भाषा आर5आरएस योजना में मानक प्रक्रियाएं
उद्देश्य प्रक्रियाएं
निर्माण vector, make-vector, make-string, list
समतुल्यता विधेय eq?, eqv?, equal?, string=?, string-ci=?, char=?, char-ci=?
प्रकार रूपांतरण vector->list, list->vector, number->string, string->number, symbol->string, string->symbol, char->integer, integer->char, string->list, list->string
संख्याएँ See separate table
स्ट्रिंग्स string?, make-string, string, string-length, string-ref, string-set!, string=?, string-ci=?, string<? string-ci<?, string<=? string-ci<=?, string>? string-ci>?, string>=? string-ci>=?, substring, string-append, string->list, list->string, string-copy, string-fill!
वर्ण char?, char=?, char-ci=?, char<? char-ci<?, char<=? char-ci<=?, char>? char-ci>?, char>=? char-ci>=?, char-alphabetic?, char-numeric?, char-whitespace?, char-upper-case?, char-lower-case?, char->integer, integer->char, char-upcase, char-downcase
सदिश make-vector, vector, vector?, vector-length, vector-ref, vector-set!, vector->list, list->vector, vector-fill!
प्रतीक symbol->string, string->symbol, symbol?
जोड़े और सूचियाँ pair?, cons, car, cdr, set-car!, set-cdr!, null?, list?, list, length, append, reverse, list-tail, list-ref, memq. memv. member, assq, assv, assoc, list->vector, vector->list, list->string, string->list
पहचान विधेय boolean?, pair?, symbol?, number?, char?, string?, vector?, port?, procedure?
निरंतरता call-with-current-continuation (call/cc), values, call-with-values, dynamic-wind
वातावरण eval, scheme-report-environment, null-environment, interaction-environment (optional)
इनपुट/आउटपुट display, newline, read, write, read-char, write-char, peek-char, char-ready?, eof-object? open-input-file, open-output-file, close-input-port, close-output-port, input-port?, output-port?, current-input-port, current-output-port, call-with-input-file, call-with-output-file, with-input-from-file(optional), with-output-to-file(optional)
प्रणाली इंटरफेस load (optional), transcript-on (optional), transcript-off (optional)
विलंबित मूल्यांकन force
कार्यात्मक प्रोग्रामिंग procedure?, apply, map, for-each
बूलियन्स boolean? not

स्ट्रिंग और चरित्र प्रक्रियाएं जिनके नाम में -ci सम्मिलित है, उनके तर्कों के बीच केस-स्वतंत्र तुलना करते हैं: एक ही वर्ण के अपर केस और लोअर केस संस्करणों को समान माना जाता है।

भाषा आर5आरएस योजना में मानक संख्यात्मक प्रक्रियाएं
उद्देश्य प्रक्रियाएं
मूल अंकगणितीय ऑपरेटर +, -, *, /, abs, quotient, remainder, modulo, gcd, lcm, expt, sqrt
भिन्नात्मक संख्याएं numerator, denominator, rational?, rationalize
सन्निकटन floor, ceiling, truncate, round
शुद्धता inexact->exact, exact->inexact, exact?, inexact?
असमानता <, <= , >, >=, =
विविध विधेय zero?, negative?, positive? odd? even?
अधिकतम और न्यूनतम max, min
त्रिकोणमिति sin, cos, tan, asin, acos, atan
घातांक exp, log
सम्मिश्र संख्याएँ make-rectangular, make-polar, real-part, imag-part, magnitude, angle, complex?
इनपुट-आउटपुट number->string, string->number
प्रकार विधेय integer?, rational?, real?, complex?, number?

- और / के कार्यान्वयन जो दो से अधिक तर्क लेते हैं परिभाषित हैं लेकिन आर5आरएस पर वैकल्पिक छोड़ दिए गए हैं।

कार्यान्वयन के लिए योजना अनुरोध

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

विभिन्न कार्यान्वयनों में काफी व्यापक समर्थन वाले एसआरएफआई में सम्मिलित हैं:Cite error: Closing </ref> missing for <ref> tag जिनमें से अधिकांश एक दूसरे से इतने भिन्न हैं कि कार्यक्रमों को एक कार्यान्वयन से दूसरे कार्यान्वयन में पोर्ट करना काफी कठिन है, और मानक भाषा के छोटे आकार का अर्थ है कि मानक, पोर्टेबल योजना में किसी भी बड़ी जटिलता का एक उपयोगी कार्यक्रम लिखना लगभग असंभव।[9] प्रोग्रामरों के लिए अपनी अपील को व्यापक बनाने के प्रयास में, आर6आरएस मानक बहुत व्यापक भाषा निर्दिष्ट करता है।

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

कुछ कार्यान्वयन अतिरिक्त सुविधाओं का समर्थन करते हैं। उदाहरण के लिए, कावा (योजना कार्यान्वयन) और JScheme जावा कक्षाओं के साथ एकीकरण प्रदान करते हैं, और योजना सी संकलक के लिए योजना अधिकांशतः सी में लिखी गई बाहरी पुस्तकालयों का उपयोग करना आसान बनाती है, योजना स्रोत में वास्तविक सी कोड को एम्बेड करने की अनुमति देने तक। एक अन्य उदाहरण प्राइवेट है, जो योजना के सीखने का समर्थन करने के लिए दृश्य उपकरणों का एक सेट प्रदान करता है।

उपयोग

योजना का व्यापक रूप से एक संख्या द्वारा उपयोग किया जाता हैCite error: Closing </ref> missing for <ref> tag पिछले 12 वर्षों से, रैकेट (प्रोग्रामिंग भाषा) ने प्रोग्रामबायडिजाइन (पूर्व में शिक्षण योजना!) परियोजना चलाया है, जिसने लगभग 600 हाई स्कूल के शिक्षकों और हजारों हाई स्कूल के छात्रों को अल्पविकसित योजना प्रोग्रामिंग के लिए उजागर किया है। MIT की पुरानी परिचयात्मक प्रोग्रामिंग कक्षा 6.001 को योजना में पढ़ाया गया था, रेफरी नाम = 6.001 >Eric Grimson (Spring 2005). "6.001 कंप्यूटर प्रोग्राम की संरचना और व्याख्या". MIT Open Courseware. Retrieved 2009-10-20.</ref> हालांकि 6.001 को और अधिक आधुनिक पाठ्यक्रमों से बदल दिया गया है, SICP को MIT में पढ़ाया जाना जारी है।[23][24] गुलाब-Hulman अपने अधिक उन्नत प्रोग्रामिंग लैंग्वेज कॉन्सेप्ट कोर्स में योजना का उपयोग करता है।[25] ब्रैंडिस विश्वविद्यालय का कोर कोर्स, स्ट्रक्चर एंड इंटरप्रिटेशन ऑफ कंप्यूटर प्रोग्राम्स (COSI121b), भी विशेष रूप से सैद्धांतिक कंप्यूटर वैज्ञानिक हैरी मैरसन द्वारा योजना में पढ़ाया जाता है।[26] इंडियाना विश्वविद्यालय की परिचयात्मक कक्षा, C211, पूरी तरह से योजना में पढ़ाई जाती है। पाठ्यक्रम का एक स्व-पुस्तक संस्करण, सीएस 61एएस, योजना का उपयोग करना जारी रखता है।[27] येल और ग्रिनेल कॉलेज में परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रम भी योजना में पढ़ाए जाते हैं।[28] जबकि कार्यात्मक प्रोग्रामिंग को तीसरे सेमेस्टर पाठ्यक्रम CSCI 2041 में विस्तार से सम्मिलित किया गया है। संदर्भ नाम = umn3 >CSCI 2041—नया पाठ्यक्रम CSE पाठ्यचर्या समिति, मिनेसोटा विश्वविद्यालय (2019 में देखा गया) -10-25)</ref> सॉफ्टवेयर उद्योग में, टाटा कंसल्टेंसी सर्विसेज, एशिया की सबसे बड़ी सॉफ्टवेयर कंसल्टेंसी फर्म, नए कॉलेज स्नातकों के लिए अपने महीने भर चलने वाले प्रशिक्षण कार्यक्रम में योजना का उपयोग करती है।

योजना का उपयोग निम्नलिखित के लिए भी किया गया है/किया गया था:

  • दस्तावेज़ शैली शब्दार्थ और विशिष्टता भाषा (डीएसएसएसएल), जो एसजीएमएल स्टाइल शीट (वेब ​​डेवलपमेंट) को निर्दिष्ट करने की एक विधि प्रदान करता है, एक योजना सबसेट का उपयोग करता है।[29]
  • जाने-माने खुला स्रोत सॉफ्टवेयर रेखापुंज ग्राफिक्स संपादक जीआईएमपी एक स्क्रिप्टिंग भाषा के रूप में छोटी योजना का उपयोग करता है।[30]
  • [[जीएनयू गुइल]] को जीएनयू परियोजना द्वारा अपनी आधिकारिक स्क्रिप्टिंग भाषा के रूप में अपनाया गया है, और योजना का कार्यान्वयन एक्सटेंशन के लिए स्क्रिप्टिंग भाषा के रूप में जीएनयू लिलीपॉन्ड और जीएनयूकैश जैसे अनुप्रयोगों में एम्बेडेड है। इसी तरह, गाइल डेस्कटॉप वातावरण सूक्ति के लिए स्क्रिप्टिंग भाषा हुआ करती थी,[31] और गनोम के ​​पास अभी भी एक परियोजना है जो इसके लाइब्रेरी स्टैक को गुइल बाइंडिंग प्रदान करता है।[32]
  • फ़ाइनल फ़ैंटेसी: द स्पिरिट्स विदिन फ़िल्म के वरिष्ठ प्रोग्रामर शिरो कवाई ने रीयल-टाइम रेंडरिंग इंजन के प्रबंधन के लिए स्क्रिप्टिंग भाषा के रूप में योजना का उपयोग किया।<ref name="shiro_kawai">कवाई, शिरो (अक्टूबर 2002). "ग्लूइंग थिंग्स टुगेदर - स्कीम इन रियल-टाइम सीजी कंटेंट प्रोडक्शन". प्रथम अंतर्राष्ट्रीय लिस्प सम्मेलन, सैन फ्रांसिस्को की कार्यवाही: 342–348. Retrieved 2012-08-09. {{cite journal}}: Check date values in: |date= (help)</रेफरी>
  • एंड्रॉइड (ऑपरेटिंग सिस्टम) के लिए Google ऐप आविष्कारक योजना का उपयोग करता है, जहां कावा (योजना कार्यान्वयन) का उपयोग Android उपकरणों पर चलने वाली जावा वर्चुअल मशीन के लिए योजना कोड को बाइट-कोड में संकलित करने के लिए किया जाता है।

रेफरी नाम = एंड्रॉइड>Bill Magnuson; Hal Abelson & Mark Friedman (2009-08-11). "Android के लिए ऐप आविष्कारक के दायरे में". Google Inc, Official Google Research blog. Retrieved 2012-08-09.</रेफरी>

यह भी देखें

संदर्भ

  1. कॉमन LISP: द लैंग्वेज, दूसरा संस्करण, गाय एल. स्टील जूनियर डिजिटल प्रेस; 1981. ISBN 978-1-55558-041-4. कॉमन लिस्प लिस्प की एक नई बोली है, जो मैकलिस्प की उत्तराधिकारी है, जो ज़ेटालिस्प और कुछ हद तक स्कीम और इंटरलिस्प से प्रभावित है। </रेफरी> इंस्टीट्यूट ऑफ़ इलेक्ट्रिकल एंड इलेक्ट्रॉनिक्स इंजीनियर्स मानक के आधिकारिक संस्थान में मानकीकृत है रेफ नाम = ieee1178 >1178-1990 (रीफ 2008) योजना प्रोग्रामिंग भाषा के लिए IEEE मानक। IEEE भाग संख्या STDPD14209, सर्वसम्मति से पुन: पुष्टि IEEE-SA मानक बोर्ड मानक समीक्षा समिति (RevCom) की बैठक में, 26 मार्च, 2008 (आइटम 6.3) मिनट पर), पुन: पुष्टि मिनट अक्टूबर 2009 तक पहुँचा। नोट: यह दस्तावेज़ केवल IEEE से खरीदने के लिए उपलब्ध है और लेखन के समय (2009) ऑनलाइन उपलब्ध नहीं है।
  2. 2.00 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10 2.11 2.12 2.13 Richard Kelsey; William Clinger; Jonathan Rees; et al. (August 1998). "Revised5 Report on the Algorithmic Language Scheme". Higher-Order and Symbolic Computation. 11 (1): 7–105. doi:10.1023/A:1010051815785. S2CID 14069423. Retrieved 2012-08-09.
  3. "R7RS final available" (PDF). 2013-07-06.
  4. 4.0 4.1 4.2 4.3 Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; et al. (August 2007). "Revised6 Report on the Algorithmic Language Scheme (R6RS)". Scheme Steering Committee. Retrieved 2011-09-13.
  5. 5.0 5.1 Sussman, Gerald Jay; Steele, Guy L. (1 December 1998). "The First Report on Scheme Revisited". Higher-Order and Symbolic Computation. 11 (4): 399–404. doi:10.1023/A:1010079421970. S2CID 7704398.
  6. "R6RS कार्यान्वयन". r6rs.org. Retrieved 2017-11-24.
  7. "एल्गोरिद्मिक लैंग्वेज स्कीम पर संशोधित^6 रिपोर्ट, परिशिष्ट ई: भाषा परिवर्तन". Scheme Steering Committee. 2007-09-26. Retrieved 2009-10-20.
  8. "R6RS मतदाता". Scheme Steering Committee. 2007. Retrieved 2012-08-09.</रेफरी><ref name="r6rs_feeley">Marc Feeley (compilation) (2007-10-26). "R6RS से संबंधित कार्यान्वयनकर्ताओं के इरादे". Scheme Steering Committee, r6rs-discuss mailing list. Retrieved 2012-08-09.
  9. 9.0 9.1 Will Clinger, Marc Feeley, Chris Hanson, Jonathan Rees and Olin Shivers (2009-08-20). "स्थिति विवरण (ड्राफ्ट)". Scheme Steering Committee. Retrieved 2012-08-09.{{cite web}}: CS1 maint: multiple names: authors list (link)
  10. Will Clinger (2013-05-10). "मतदान अवधि का विस्तार". Scheme Language Steering Committee, scheme-reports mailing list. Archived from the original on 2013-07-21. Retrieved 2013-07-07.</रेफरी> और अंतिम रिपोर्ट 6 अगस्त 2013 से उपलब्ध है, उस प्रयास की 'छोटी' भाषा का वर्णन: इसलिए इसे अलगाव में R6RS के उत्तराधिकारी के रूप में नहीं माना जा सकता है।
    1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
     LISP 1, 1.5, LISP 2(abandoned)
     Maclisp
     Interlisp
     MDL
     Lisp Machine Lisp
     Scheme  R5RS  R6RS  R7RS small
     NIL
     ZIL (Zork Implementation Language)
     Franz Lisp
     Common Lisp  ANSI standard
     Le Lisp
     MIT Scheme
     T
     Chez Scheme
     Emacs Lisp
     AutoLISP
     PicoLisp
     Gambit
     EuLisp
     ISLISP
     OpenLisp
     PLT Scheme  Racket
     GNU Guile
     Visual LISP
     Clojure
     Arc
     LFE
     Hy

    विशिष्ट विशेषताएं

    योजना मुख्य रूप से एक कार्यात्मक प्रोग्रामिंग भाषा है। यह लिस्प प्रोग्रामिंग भाषा परिवार के अन्य सदस्यों के साथ कई विशेषताएं साझा करता है। योजना का बहुत ही सरल सिंटैक्स एस-अभिव्यक्ति पर आधारित है, कोष्ठक में दी गई सूची जिसमें एक उपसर्ग ऑपरेटर के तर्कों का पालन किया जाता है। योजना कार्यक्रम इस प्रकार नेस्टेड सूचियों के अनुक्रमों से युक्त होते हैं। योजना में सूचियाँ भी मुख्य डेटा संरचना हैं, जो स्रोत कोड और डेटा स्वरूपों (समरूपता) के बीच घनिष्ठ समानता की ओर ले जाती हैं। योजना कार्यक्रम गतिशील रूप से योजना कोड के टुकड़ों को आसानी से बना और मूल्यांकन कर सकते हैं।

    डेटा संरचनाओं के रूप में सूचियों पर निर्भरता सभी लिस्प बोलियों द्वारा साझा की जाती है। योजना सूची (कंप्यूटिंग) का एक समृद्ध सेट प्राप्त करती है | सूची-प्रसंस्करण आदिम जैसे विपक्ष |cons, सीएआर और सीडीआर |car और cdrइसके लिस्प पूर्वजों से। योजना सख्ती से लेकिन प्रकार प्रणाली का उपयोग करती है और प्रथम श्रेणी के कार्यों का समर्थन करती है। इस प्रकार, प्रक्रियाओं को चर के मान के रूप में निर्दिष्ट किया जा सकता है या प्रक्रियाओं के लिए तर्क के रूप में पारित किया जा सकता है।

    यह खंड मुख्य रूप से भाषा की नवीन विशेषताओं पर ध्यान केंद्रित करता है, जिसमें उन विशेषताओं को शामिल किया गया है जो योजना को अन्य लिस्प्स से अलग करती हैं। जब तक अन्यथा न कहा जाए, सुविधाओं का विवरण R5RS मानक से संबंधित है। इस खंड में प्रदान किए गए उदाहरणों में, नोटेशन ===> परिणाम का उपयोग तुरंत पूर्ववर्ती पंक्ति पर अभिव्यक्ति के मूल्यांकन के परिणाम को इंगित करने के लिए किया जाता है। यह R5RS में प्रयुक्त समान कन्वेंशन है।

    अतिसूक्ष्मवाद

    योजना एक बहुत ही सरल भाषा है, तुलनीय अभिव्यंजक शक्ति (कंप्यूटर विज्ञान) की कई अन्य भाषाओं की तुलना में इसे लागू करना बहुत आसान है।<ref name="easy_to_implement_scheme48">स्कीम 48 कार्यान्वयन को इसलिए नाम दिया गया है क्योंकि दुभाषिया रिचर्ड केल्सी और जोनाथन रीस द्वारा 48 घंटे (6 अगस्त) में लिखा गया था। – 7वां, 1986. देखें Richard Kelsey; Jonathan Rees; Mike Sperber (2008-01-10). "अपूर्ण योजना 48 संदर्भ मैनुअल 1.8 जारी करने के लिए". Jonathan Rees, s48.org. Retrieved 2012-08-09.</ रेफ> यह आसानी लैम्ब्डा कैलकुस के उपयोग के कारण भाषा के वाक्य-विन्यास को अधिक आदिम रूपों से प्राप्त करने के लिए जिम्मेदार है। उदाहरण के लिए, R5RS योजना मानक में परिभाषित 23 s-एक्सप्रेशन-आधारित सिंटैक्टिक निर्माण, 14 को व्युत्पन्न या पुस्तकालय रूपों के रूप में वर्गीकृत किया गया है, जिन्हें मैक्रोज़ के रूप में लिखा जा सकता है जिसमें अधिक मौलिक रूप शामिल हैं, मुख्य रूप से लैम्ब्डा। जैसा कि R5RS (§3.1) कहता है: वेरिएबल बाइंडिंग कंस्ट्रक्शन का सबसे मौलिक लैम्ब्डा एक्सप्रेशन है, क्योंकि अन्य सभी वेरिएबल बाइंडिंग कंस्ट्रक्शन को लैम्ब्डा एक्सप्रेशन के संदर्भ में समझाया जा सकता है।

    मौलिक रूप: परिभाषित करें, लैम्ब्डा, उद्धरण, अगर, परिभाषित-वाक्यविन्यास, लेट-सिंटेक्स, लेट्रेक-सिंटेक्स, सिंटैक्स-नियम, सेट!
    व्युत्पन्न रूप: do, let, let*, letrec, cond, case, and, or, start,Named let,delay, unquote, unquote-splicing, quasiquote

    उदाहरण: लागू करने के लिए एक मैक्रो let एक अभिव्यक्ति के रूप में lambda चर बाइंडिंग करने के लिए।

    <वाक्यविन्यास लैंग = योजना> (परिभाषित-वाक्यविन्यास let

     (वाक्यविन्यास-नियम ()
       ((चलो ((var expr) ...) शरीर ...)
         ((लैम्ब्डा (var ...) बॉडी ...) expr ...))))
    

    </वाक्यविन्यास हाइलाइट>

    इस प्रकार उपयोग करना let जैसा कि एक योजना कार्यान्वयन के ऊपर परिभाषित किया गया है, फिर से लिखा जाएगा(let ((a 1)(b 2)) (+ b a))जैसा((lambda (a b) (+ b a)) 1 2), जो कार्यान्वयन के कार्य को कोडिंग प्रक्रिया के तात्कालिकता के कार्य तक कम कर देता है।

    1998 में, सुस्मान और स्टील ने टिप्पणी की कि योजना का अतिसूक्ष्मवाद एक सचेत डिजाइन लक्ष्य नहीं था, बल्कि डिजाइन प्रक्रिया का अनपेक्षित परिणाम था। हम वास्तव में कुछ जटिल बनाने की कोशिश कर रहे थे और आकस्मिक रूप से पता चला कि हमने गलती से कुछ ऐसा डिजाइन किया था जो हमारे सभी लक्ष्यों को पूरा करता था लेकिन जितना हमने सोचा था उससे कहीं अधिक सरल था .... हमने महसूस किया कि लैम्ब्डा कैलकुलस - एक छोटा, सरल औपचारिकता - हो सकता है एक शक्तिशाली और अभिव्यंजक प्रोग्रामिंग भाषा के मूल के रूप में सेवा करें।

    लेक्सिकल स्कोप

    अधिकांश आधुनिक प्रोग्रामिंग भाषाओं की तरह और पहले के लिस्प्स जैसे कि मैक्लिस्प के विपरीत, स्कीम को लेक्सिकली स्कोप किया गया है: प्रोग्राम यूनिट में सभी संभावित चर बाइंडिंग का विश्लेषण प्रोग्राम यूनिट के पाठ को पढ़कर किया जा सकता है, जिसमें संदर्भों पर विचार किए बिना इसे कहा जा सकता है। यह डायनेमिक स्कूपिंग के साथ विरोधाभासी है जो प्रारंभिक लिस्प बोलियों की विशेषता थी, क्योंकि उस समय के कंपाइलरों और दुभाषियों में लेक्सिकल स्कूपिंग एल्गोरिदम को लागू करने के लिए उपयोग की जाने वाली आदिम पाठ्य प्रतिस्थापन विधियों से जुड़ी प्रसंस्करण लागत थी। उन लिस्प्स में, कॉल के संदर्भ के आधार पर, प्रक्रिया के बाहर काफी विशिष्ट बाइंडिंग को संदर्भित करने के लिए एक प्रक्रिया के अंदर एक मुक्त चर के संदर्भ के लिए यह पूरी तरह से संभव था।

    लेक्सिकल स्कूपिंग को शामिल करने की प्रेरणा, जो 1970 के दशक की शुरुआत में लिस्प के अपने नए संस्करण में एक असामान्य स्कूपिंग मॉडल था, ALGOL के सुस्मान के अध्ययन से आया था। उन्होंने सुझाव दिया कि ब्लॉक (प्रोग्रामिंग) | ALGOL- जैसे लेक्सिकल स्कोपिंग मैकेनिज्म, कार्ल हेविट#एक्टर मॉडल | हेविट के एक्टर मॉडल को लिस्प में लागू करने के अपने प्रारंभिक लक्ष्य को महसूस करने में मदद करेंगे।

    लिस्प बोली में लेक्सिकल स्कोपिंग को कैसे पेश किया जाए, इस पर प्रमुख अंतर्दृष्टि को सुस्मान और स्टील के 1975 लैम्ब्डा पेपर, स्कीम: एन इंटरप्रेटर फॉर एक्सटेंडेड लैम्ब्डा कैलकुलस में लोकप्रिय बनाया गया था।<ref name="lambda_paper_1">Gerald Jay Sussman & Guy Lewis Steele Jr. (December 1975). "योजना: विस्तारित लैम्ब्डा कैलकुलस के लिए एक दुभाषिया" (PDF). AI Memos. MIT AI Lab. AIM-349. hdl:1721.1/5794. Retrieved 23 December 2021.</ रेफ> जहां उन्होंने क्लोजर (कंप्यूटर विज्ञान) (पृष्ठ 21 पर) की अवधारणा को अपनाया, जिसे 1970 में एआई मेमो में जोएल मूसा द्वारा वर्णित किया गया था, जिन्होंने इस विचार को पीटर जे लैंडिन को जिम्मेदार ठहराया था।<ref name="Moses">Joel Moses (June 1970), The Function of FUNCTION in LISP, or Why the FUNARG Problem Should Be Called the Environment Problem, hdl:1721.1/5854, AI Memo 199, A useful metaphor for the difference between FUNCTION and QUOTE in LISP is to think of QUOTE as a porous or an open covering of the function since free variables escape to the current environment. FUNCTION acts as a closed or nonporous covering (hence the term "closure" used by Landin). Thus we talk of "open" Lambda expressions (functions in LISP are usually Lambda expressions) and "closed" Lambda expressions. [...] My interest in the environment problem began while Landin, who had a deep understanding of the problem, visited MIT during 1966-67. I then realized the correspondence between the FUNARG lists which are the results of the evaluation of "closed" Lambda expressions in LISP and ISWIM's Lambda Closures.

  11. van Tonder, André (1 January 2004). "A Lambda Calculus for Quantum Computation". SIAM Journal on Computing. 33 (5): 1109–1135. arXiv:quant-ph/0307150. doi:10.1137/S0097539703432165. S2CID 613571.
  12. Niehren, J.; Schwinghammer, J.; Smolka, G. (November 2006). "A concurrent lambda calculus with futures" (PDF). Theoretical Computer Science. 364 (3): 338–356. doi:10.1016/j.tcs.2006.08.016.
  13. Gerald Jay Sussman & Guy Lewis Steele Jr. (March 1976). "लैम्ब्डा: द अल्टीमेट इंपीरेटिव". AI Memos. MIT AI Lab. AIM-353. Archived from the original (postscript or PDF) on 2016-05-10. Retrieved 2012-08-09.</रेफरी> उन्होंने लैम्ब्डा पेपर्स के पहले में योजना के अपने पहले विवरण के साथ निरंतरता-पासिंग शैली की शुरुआत की, और बाद के पेपरों में, वे लैम्ब्डा कैलकुस के इस व्यावहारिक उपयोग की कच्ची शक्ति का प्रदर्शन करने के लिए आगे बढ़े।

    ब्लॉक संरचना

    योजना अपनी ब्लॉक संरचना को पहले की ब्लॉक संरचित भाषाओं, विशेष रूप से ALGOL से विरासत में लेती है। योजना में, ब्लॉक तीन बाध्यकारी संरचनाओं द्वारा कार्यान्वित किए जाते हैं: चलो अभिव्यक्ति |let, let* और letrec. उदाहरण के लिए, निम्नलिखित निर्माण एक ब्लॉक (प्रोग्रामिंग) बनाता है जिसमें एक प्रतीक कहा जाता है var संख्या 10 के लिए बाध्य है:

    <वाक्यविन्यास लैंग = योजना> (var हंस परिभाषित करें)

    यहाँ var का कोई भी संदर्भ हंस के लिए बाध्य होगा

    (चलो ((वर 10))

     ;; बयान यहाँ जाते हैं। यहां var का कोई भी संदर्भ 10 तक सीमित रहेगा।
     )
    
    यहाँ var का कोई भी संदर्भ हंस के लिए बाध्य होगा

    </वाक्यविन्यास हाइलाइट>

    प्रोग्रामर की आवश्यकता के अनुसार मनमाने ढंग से जटिल ब्लॉक संरचना बनाने के लिए ब्लॉक नेस्टिंग (कंप्यूटिंग) हो सकते हैं। स्थानीय बाइंडिंग बनाने के लिए ब्लॉक स्ट्रक्चरिंग का उपयोग नामकरण टकराव के जोखिम को कम करता है जो अन्यथा हो सकता है।

    का एक रूप let, let*, बाइंडिंग को उसी निर्माण में पहले परिभाषित चरों को संदर्भित करने की अनुमति देता है, इस प्रकार:

    <वाक्यविन्यास लैंग = योजना> (चलो * ((var1 10)

          (var2 (+ var1 12)))
     ;; लेकिन var1 की परिभाषा var2 को संदर्भित नहीं कर सकी
     )
    

    </वाक्यविन्यास हाइलाइट> अन्य संस्करण, letrec, पारस्परिक पुनरावर्तन प्रक्रियाओं को एक दूसरे से बाध्य करने के लिए सक्षम करने के लिए डिज़ाइन किया गया है।

    <वाक्यविन्यास लैंग = योजना>

    जोड़े की सूची के रूप में हॉफस्टैटर के पुरुष और महिला अनुक्रमों की गणना

    (परिभाषित करें (हॉफस्टाटर-नर-मादा एन)

     (लेट्रेक ((महिला (लैम्ब्डा (एन)
    

    (यदि (= n 0) 1 (- n (पुरुष (महिला (- n 1))))))) (पुरुष (लैम्ब्डा (एन) (यदि (= n 0) 0 (- n (महिला (पुरुष (- n 1)))))))

       (पाश दें ((मैं0))
         (अगर (> मैं n)
    

    '() (विपक्ष (विपक्ष (महिला मैं) (पुरुष मैं)) (लूप (+ i 1))))))

    (हॉफस्टाटर-नर-मादा 8)

    ===> ((1 . 0) (1 . 0) (2 . 1) (2 . 2) (3 . 2) (3 . 3) (4 . 4) (5. 4) (5. 5) ) </वाक्यविन्यास हाइलाइट> (इस उदाहरण में प्रयुक्त परिभाषाओं के लिए हॉफस्टाटर अनुक्रम# हॉफस्टाटर महिला और पुरुष अनुक्रम देखें। हॉफस्टैटर के नर और मादा अनुक्रम देखें।)

    सभी प्रक्रियाएं एक में बंधी हुई हैं letrec नाम से एक दूसरे को संदर्भित कर सकते हैं, साथ ही पहले उसी में परिभाषित चर के मान भी letrec, लेकिन वे उसी में बाद में परिभाषित मूल्यों को संदर्भित नहीं कर सकते हैं letrec.

    का एक रूप let, नामित लेट फॉर्म, के बाद एक पहचानकर्ता है let कीवर्ड। यह लेट वेरिएबल्स को एक प्रक्रिया के तर्क से बांधता है जिसका नाम दिया गया पहचानकर्ता है और जिसका शरीर लेट फॉर्म का शरीर है। प्रक्रिया को कॉल करके वांछित के रूप में शरीर को दोहराया जा सकता है। पुनरावृत्ति को लागू करने के लिए नामित लेट का व्यापक रूप से उपयोग किया जाता है।

    उदाहरण: एक साधारण काउंटर

    <वाक्यविन्यास लैंग = योजना> (लेट लूप ((एन 1))

     (अगर (> एन 10)
         '()
         (विपक्ष एन
    

    (लूप (+ n 1)))))

    ===> (1 2 3 4 5 6 7 8 9 10) </वाक्यविन्यास हाइलाइट>

    योजना में किसी भी प्रक्रिया की तरह, नामित लेट में बनाई गई प्रक्रिया प्रथम श्रेणी की वस्तु है।

    उचित पूंछ पुनरावर्तन

    योजना का एक पुनरावृत्ति निर्माण है, do, लेकिन यह पुनरावृत्ति व्यक्त करने के लिए पूंछ पुनरावृत्ति का उपयोग करने के लिए योजना में अधिक प्रोग्रामिंग मुहावरा है। टेल कॉल्स को अनुकूलित करने के लिए मानक-अनुरूप योजना कार्यान्वयन की आवश्यकता है ताकि सक्रिय टेल कॉल्स की असीमित संख्या का समर्थन किया जा सके (R5RS सेकंड 3.5)।- एक संपत्ति जिसे योजना रिपोर्ट उचित पूंछ पुनरावर्तन के रूप में वर्णित करती है - इसे योजना प्रोग्रामर के लिए पुनरावर्ती संरचनाओं का उपयोग करके पुनरावृत्त एल्गोरिदम लिखने के लिए सुरक्षित बनाती है, जो कभी-कभी अधिक सहज होती हैं। पूंछ पुनरावर्ती प्रक्रियाएं और नाम letप्रपत्र पूंछ पुनरावर्तन का उपयोग करके पुनरावृत्ति के लिए सहायता प्रदान करता है।

    <वाक्यविन्यास लैंग = योजना>

    0 से 9 तक वर्गों की सूची बनाना
    नोट
    लूप बस एक मनमाना प्रतीक है जिसका उपयोग लेबल के रूप में किया जाता है। कोई भी प्रतीक करेगा।

    (परिभाषित करें (वर्गों की सूची n)

     (लूप दें ((i n) (res '()))
       (अगर (<मैं 0)
           आर ई
           (लूप (- i 1) (विपक्ष (* i) रेस)))))
    

    (वर्गों की सूची 9) ===> (0 1 4 9 16 25 36 49 64 81) </वाक्यविन्यास हाइलाइट>

    प्रथम श्रेणी निरंतरता

    योजना में निरंतरता प्रथम श्रेणी की वस्तुएं हैं। योजना प्रक्रिया प्रदान करती है call-with-current-continuation (के रूप में भी जाना जाता है call/cc) प्रोग्रामर द्वारा प्रदान की गई प्रक्रिया में औपचारिक तर्क के लिए बाध्य एक बचने की प्रक्रिया के रूप में इसे पैक करके वर्तमान निरंतरता को पकड़ने के लिए। (R5RS सेकंड 6.4)प्रथम श्रेणी की निरंतरता प्रोग्रामर को गैर-स्थानीय नियंत्रण प्रवाह बनाने में सक्षम बनाती है जैसे कि पुनरावृत्तियाँ, कोरटाइन और बैक ट्रैकिंग

    अनिवार्य प्रोग्रामिंग भाषाओं में वापसी कथन के व्यवहार का अनुकरण करने के लिए निरंतरता का उपयोग किया जा सकता है। निम्नलिखित समारोह find-first, दिया गया कार्य func और सूची lst, पहला तत्व लौटाता है x में lst ऐसा है कि (func x) सच हो जाता है।

    <वाक्यविन्यास लैंग = योजना> (परिभाषित करें (ढूंढें-पहले func lst)

     (कॉल-साथ-वर्तमान-निरंतरता
      (लैम्ब्डा (वापसी-तत्काल)
        (प्रत्येक के लिए (लैम्ब्डा (एक्स)
    

    (अगर (फंक एक्स) (वापसी-तुरंत x))) प्रथम)

        #एफ)))
    

    (पहला पूर्णांक खोजें? '(1/2 3/4 5.6 7 8/9 10 11)) ===> 7 (खोज-पहला शून्य? '(1 2 3 4)) ===> #एफ </वाक्यविन्यास हाइलाइट>

    निम्नलिखित उदाहरण, एक पारंपरिक प्रोग्रामर की पहेली, से पता चलता है कि योजना निरंतरता को प्रथम श्रेणी की वस्तुओं के रूप में संभाल सकती है, उन्हें चर के लिए बाध्य कर सकती है और उन्हें प्रक्रियाओं के तर्क के रूप में पारित कर सकती है।

    <वाक्यविन्यास लैंग = योजना> (चलो * ((यिन

            ((लैम्ब्डा (सीसी) (प्रदर्शन @ ) सीसी) (कॉल-साथ-वर्तमान-निरंतरता (लैम्ब्डा (सी) सी)))
          (यांग
            ((लैम्ब्डा (सीसी) (प्रदर्शन * ) सीसी) (कॉल-साथ-वर्तमान-निरंतरता (लैम्ब्डा (सी) सी)))))
       (यिन यांग))
    

    </वाक्यविन्यास हाइलाइट> निष्पादित होने पर यह कोड एक गिनती अनुक्रम प्रदर्शित करता है: @*@**@***@****@*****@******@*******@********...

    प्रक्रियाओं और चर के लिए साझा नाम स्थान

    कॉमन लिस्प के विपरीत, योजना में सभी डेटा और प्रक्रियाएं एक सामान्य नाम स्थान साझा करती हैं, जबकि कॉमन लिस्प में कॉमन लिस्प#फ़ंक्शन नेमस्पेस एक फ़ंक्शन और एक चर के लिए एक ही नाम को संभव बनाता है, और एक को संदर्भित करने के लिए विशेष संकेतन की आवश्यकता होती है। मूल्य के रूप में कार्य करें। इसे कभी-कभी लिस्प-1 बनाम लिस्प-2 भेद के रूप में जाना जाता है, जो योजना के एकीकृत नामस्थान और कॉमन लिस्प के अलग-अलग नामस्थानों का संदर्भ देता है।<ref>Gabriel, Richard P.; Pitman, Kent (1988). "Technical Issues of Separation in Function Cells and Value Cells". Lisp and Symbolic Computation. Vol. 1, no. 1 (published June 1988). pp. 81–101. doi:10.1007/BF01806178. Retrieved 2012-08-09.

  14. 14.0 14.1 Philip L. Bewig (2008-01-24). "SRFI 41: Streams". The SRFI Editors, schemers.org. Retrieved 2012-08-09.
  15. William Clinger and Jonathan Rees, ed. (1991). "Revised4 Report on the Algorithmic Language Scheme". ACM Lisp Pointers. 4 (3): 1–55. Retrieved 2012-08-09.
  16. Flatt, Matthew (2016). "Binding as sets of scopes". Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. pp. 705–717. doi:10.1145/2837614.2837620. ISBN 978-1-4503-3549-2. S2CID 15401805.
  17. Cite error: Invalid <ref> tag; no text was provided for refs named lambda_paper_1
  18. जोनाथन रीस, द स्कीम ऑफ़ थिंग्स द जून 1992 मीटिंग Archived 2011-07-16 at the Wayback Machine (पोस्टस्क्रिप्ट), लिस्प पॉइंटर्स में, वी (4), अक्टूबर-दिसंबर 1992। पुनःप्राप्त 2012-08-09
  19. Cite error: Invalid <ref> tag; no text was provided for refs named ieee1178
  20. Taylor Campbell (2005-07-21). "SRFI 62: S-expression comments". The SRFI Editors, schemers.org. Retrieved 2012-08-09.
  21. William D Clinger (1999-07-01). "SRFI 6: Basic String Ports". The SRFI Editors, schemers.org. Retrieved 2012-08-09.
  22. Scott G. Miller (2002-06-25). "SRFI 28: Basic Format Strings". The SRFI Editors, schemers.org. Retrieved 2012-08-09.
  23. Alex Vandiver; Nelson Elhage; et al. (January 2009). "6.184 - जॉम्बी कैफीन युक्त पेय 6.001". MIT CSAIL. Retrieved 2009-10-20.</ रेफ> इसी तरह, यूसी बर्कले, सीएस 61ए में प्रारंभिक कक्षा, 2011 तक पूरी तरह से योजना में सिखाई गई थी, गतिशील दायरे को प्रदर्शित करने के लिए लोगो (प्रोग्रामिंग भाषा) में मामूली विचलन को बचाएं। आज, एमआईटी की तरहयूसी बरकेले ने पाठ्यक्रम को एक अधिक आधुनिक संस्करण के साथ बदल दिया है जो मुख्य रूप से पायथन (प्रोग्रामिंग भाषा) में पढ़ाया जाता है, लेकिन वर्तमान पाठ्यक्रम अभी भी पुराने पाठ्यक्रम पर आधारित है, और कक्षा के कुछ हिस्सों को अभी भी योजना में पढ़ाया जाता है। रेफरी नाम = 61ए >John DeNero (Fall 2019). "कंप्यूटर साइंस 61A, बर्कले". Department of Electrical Engineering and Computer Sciences, Berkeley. Retrieved 2019-12-17.</रेफरी> माथियास फेलिसन द्वारा पाठ्यपुस्तक प्रोग्राम कैसे डिजाइन करें, वर्तमान में नॉर्थईस्टर्न विश्वविद्यालय में, उच्च शिक्षा के कुछ संस्थानों द्वारा उनके परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रमों के लिए उपयोग की जाती है। नॉर्थईस्टर्न यूनिवर्सिटी और वॉर्सेस्टर पॉलिटेक्निक संस्थान दोनों ही योजना का उपयोग विशेष रूप से उनके परिचयात्मक पाठ्यक्रम फंडामेंटल ऑफ कंप्यूटर साइंस (CS2500) और इंट्रोडक्शन टू प्रोग्राम डिजाइन (CS1101) के लिए करते हैं। संदर्भ नाम = neu >CS 2500: कंप्यूटर साइंस I के बुनियादी सिद्धांत, पूर्वोत्तर विश्वविद्यालय
  24. CS 1101: Introduction to Program Design (A05): course software, Worcester Polytechnic Institute
  25. "CSSE 304: Programming Language Concepts". Rose-Hulman Institute of Technology.
  26. "Spring 2021 CS121b Syllabus" (PDF). Brandeis University.
  27. "Home". berkeley-cs61as.github.io.
  28. Dana Angluin (Fall 2009). "कंप्यूटर विज्ञान का परिचय (सीपीएससी 201)". The Zoo, Yale University Computer Science Department. Retrieved 2009-10-20.</रेफरी> प्रोग्रामिंग डिजाइन प्रतिमान, रेफरी नाम = neu2 >"प्रोग्रामिंग डिजाइन प्रतिमान CSG107 कोर्स रीडिंग". Northeastern University College of Computer and Information Science. Fall 2009. Retrieved 2012-08-09.</रेफरी> पूर्वोत्तर विश्वविद्यालय में कंप्यूटर विज्ञान स्नातक छात्रों के लिए एक अनिवार्य पाठ्यक्रम भी व्यापक रूप से योजना का उपयोग करता है। मिनेसोटा विश्वविद्यालय में पूर्व परिचयात्मक कंप्यूटर साइंस कोर्स - ट्विन सिटीज, CSCI 1901, ने भी अपनी प्राथमिक भाषा के रूप में स्कीम का उपयोग किया, इसके बाद एक कोर्स किया जिसने छात्रों को जावा प्रोग्रामिंग भाषा से परिचित कराया; संदर्भ नाम = umn >कंप्यूटर प्रोग्रामिंग I की संरचना Archived 2010-06-19 at the Wayback Machine, कंप्यूटर विज्ञान विभाग, मिनेसोटा विश्वविद्यालय, स्प्रिंग 2010 (2010-01-30 तक पहुँचा)। </ रेफ> हालांकि, एमआईटी के उदाहरण के बाद, विभाग ने 1901 को पायथन-आधारित सीएससीआई 1133 के साथ बदल दिया, संदर्भ नाम= umn2 >CSci आवश्यक कक्षा पाठ्यक्रम विवरण और अन्य जानकारी Archived 2019-10-25 at the Wayback Machine, कंप्यूटर विज्ञान विभाग, मिनेसोटा विश्वविद्यालय (2019-10-25 तक पहुँचा)
  29. Robin Cover (2002-02-25). "DSSSL - Document Style Semantics and Specification Language. ISO/IEC 10179:1996". Cover Pages. Retrieved 2012-08-09.
  30. "The major scripting language for the GIMP that has been attached to it today is Scheme." From Dov Grobgeld (2002). "The GIMP Basic Scheme Tutorial". The GIMP Team. Retrieved 2012-08-09.
  31. Todd Graham Lewis; David Zoll; Julian Missig (2002). "इंटरनेट आर्काइव से गनोम एफएक्यू". The Gnome Team, gnome.org. Archived from the original on 2000-05-22. Retrieved 2012-08-09.
  32. "छल-सूक्ति". Free Software Foundation. Retrieved 2012-08-09.</ रेफ> मौजूदा Emacs लिस्प दुभाषिया की जगह, GNU के प्रमुख कार्यक्रम, GNU Emacs में Guile को शामिल करने की एक परियोजना है।[citation needed]


अग्रिम पठन


बाहरी संबंध