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

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

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

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

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

वर्तमान में विभिन्न योजना कार्यान्वयनों की नवीनतम रिलीज़ R6RS मानक का समर्थन करता है। R6RS के लिए प्रस्तावित निहित रूप से चरणबद्ध पुस्तकालयों का एक पोर्टेबल संदर्भ कार्यान्वयन है, जिसे सिंटैक्स कहा जाता है, जो विभिन्न पुराने योजना कार्यान्वयनों पर खुद को ठीक से लोड और बूटस्ट्रैप करता है। रेफ नाम = सिंटैक्स>

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

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

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

R7RS (छोटी भाषा) का नौवां मसौदा 15 अप्रैल, 2013 को उपलब्ध कराया गया था। रेफरी नाम= r7rs-ड्राफ्ट-9 > इस मसौदे की पुष्टि करने वाला एक मत 20 मई 2013 को समाप्त हुआ, और अंतिम रिपोर्ट 6 अगस्त 2013 से उपलब्ध है, उस प्रयास की 'छोटी' भाषा का वर्णन: इसलिए इसे अलगाव में R6RS के उत्तराधिकारी के रूप में नहीं माना जा सकता है।

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

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

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

अतिसूक्ष्मवाद
योजना एक बहुत ही सरल भाषा है, तुलनीय अभिव्यंजक शक्ति (कंप्यूटर विज्ञान) की कई अन्य भाषाओं की तुलना में इसे लागू करना बहुत आसान है। स्कीम 48 कार्यान्वयन को इसलिए नाम दिया गया है क्योंकि दुभाषिया रिचर्ड केल्सी और जोनाथन रीस द्वारा 48 घंटे (6 अगस्त) में लिखा गया था। –7वां, 1986. देखें  यह आसानी लैम्ब्डा कैलकुस के उपयोग के कारण भाषा के वाक्य-विन्यास को अधिक आदिम रूपों से प्राप्त करने के लिए जिम्मेदार है। उदाहरण के लिए, R5RS योजना मानक में परिभाषित 23 s-एक्सप्रेशन-आधारित सिंटैक्टिक निर्माण, 14 को व्युत्पन्न या पुस्तकालय रूपों के रूप में वर्गीकृत किया गया है, जिन्हें मैक्रोज़ के रूप में लिखा जा सकता है जिसमें अधिक मौलिक रूप शामिल हैं, मुख्य रूप से लैम्ब्डा। जैसा कि R5RS (§3.1) कहता है: वेरिएबल बाइंडिंग कंस्ट्रक्शन का सबसे मौलिक लैम्ब्डा एक्सप्रेशन है, क्योंकि अन्य सभी वेरिएबल बाइंडिंग कंस्ट्रक्शन को लैम्ब्डा एक्सप्रेशन के संदर्भ में समझाया जा सकता है।


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

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

<वाक्यविन्यास लैंग = योजना> (परिभाषित-वाक्यविन्यास let (वाक्यविन्यास-नियम ((चलो ((var expr) ...) शरीर ...)     ((लैम्ब्डा (var ...) बॉडी ...) expr ...)))) 

इस प्रकार उपयोग करना  जैसा कि एक योजना कार्यान्वयन के ऊपर परिभाषित किया गया है, फिर से लिखा जाएगा जैसा, जो कार्यान्वयन के कार्य को कोडिंग प्रक्रिया के तात्कालिकता के कार्य तक कम कर देता है।

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

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

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

लिस्प बोली में लेक्सिकल स्कोपिंग को कैसे पेश किया जाए, इस पर प्रमुख अंतर्दृष्टि को सुस्मान और स्टील के 1975 लैम्ब्डा पेपर, स्कीम: एन इंटरप्रेटर फॉर एक्सटेंडेड लैम्ब्डा कैलकुलस में लोकप्रिय बनाया गया था।

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

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

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

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

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

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

<वाक्यविन्यास लैंग = योजना> (चलो * ((var1 10) (var2 (+ var1 12))) ;; लेकिन var1 की परिभाषा var2 को संदर्भित नहीं कर सकी  )

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

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

(परिभाषित करें (हॉफस्टाटर-नर-मादा एन) (लेट्रेक ((महिला (लैम्ब्डा (एन) (यदि (= 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) )  (इस उदाहरण में प्रयुक्त परिभाषाओं के लिए हॉफस्टाटर अनुक्रम# हॉफस्टाटर महिला और पुरुष अनुक्रम देखें। हॉफस्टैटर के नर और मादा अनुक्रम देखें।)

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

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

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

<वाक्यविन्यास लैंग = योजना> (लेट लूप ((एन 1)) (अगर (> एन 10) '     (विपक्ष एन (लूप (+ n 1)))))

===> (1 2 3 4 5 6 7 8 9 10) 

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

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

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

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

(वर्गों की सूची 9) ===> (0 1 4 9 16 25 36 49 64 81) 

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

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

<वाक्यविन्यास लैंग = योजना> (परिभाषित करें (ढूंढें-पहले func lst) (कॉल-साथ-वर्तमान-निरंतरता (लैम्ब्डा (वापसी-तत्काल)    (प्रत्येक के लिए (लैम्ब्डा (एक्स) (अगर (फंक एक्स) (वापसी-तुरंत x))) प्रथम)    #एफ)))

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

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

<वाक्यविन्यास लैंग = योजना> (चलो * ((यिन        ((लैम्ब्डा (सीसी) (प्रदर्शन @ ) सीसी) (कॉल-साथ-वर्तमान-निरंतरता (लैम्ब्डा (सी) सी)))       (यांग ((लैम्ब्डा (सीसी) (प्रदर्शन * ) सीसी) (कॉल-साथ-वर्तमान-निरंतरता (लैम्ब्डा (सी) सी))))) (यिन यांग))  निष्पादित होने पर यह कोड एक गिनती अनुक्रम प्रदर्शित करता है:

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

<वाक्यविन्यास लैंग = योजना> (एफ 10 परिभाषित करें) एफ ===> 10 (सेट! एफ (+ एफ एफ 6)) एफ ===> 26 (सेट! एफ (लैम्ब्डा (एन) (+ एन 12))) (एफ 6) ===> 18 (सेट! एफ (एफ 1)) एफ ===> 13 (लागू करें + '(1 2 3 4 5 6)) ===> 21 (सेट! एफ (लैम्ब्डा (एन) (+ एन 100))) (नक्शा एफ '(1 2 3)) ===> (101 102 103) </वाक्यविन्यास हाइलाइट>
 * चर एक संख्या के लिए बाध्य:
 * उत्परिवर्तन (बाध्य मूल्य में परिवर्तन)
 * एक ही चर के लिए एक प्रक्रिया असाइन करना:
 * एक ही चर के लिए एक अभिव्यक्ति का परिणाम निर्दिष्ट करना:
 * कार्यात्मक प्रोग्रामिंग:

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

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

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

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

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

उदाहरण 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 (सटीक? एक्सआर) ===> #एफ (सटीक? ग्यारहवीं) ===> #एफ </वाक्यविन्यास हाइलाइट>
 * चार परिमेय वास्तविक संख्याओं का योग
 * दो परिमेय वास्तविक संख्याओं का योग
 * सटीकता की जाँच करें।

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

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

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

ये प्रिमिटिव, जो फ़्यूचर्स और वादों के रूप में जाने जाने वाले मूल्यों का उत्पादन या संचालन करते हैं, का उपयोग उन्नत आलसी मूल्यांकन निर्माणों जैसे स्ट्रीम (कंप्यूटिंग) को लागू करने के लिए किया जा सकता है। R6RS मानक में, ये अब आदिम नहीं हैं, बल्कि इसके बजाय, R5RS संगतता लाइब्रेरी (rnrs r5rs (6)) के हिस्से के रूप में प्रदान किए जाते हैं।

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

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

<वाक्यविन्यास लैंग = योजना> (फाइब को परिभाषित करें (धारा-विपक्ष 0 (धारा-विपक्ष 1     (स्ट्रीम-मैप + फाइबर (स्ट्रीम-सीडीआर फ़ाइब))))) (स्ट्रीम-रेफ फाइबर 99) ===> 218922995834555169026 </वाक्यविन्यास हाइलाइट>
 * फाइबोनैचि अनुक्रम को परिभाषित करें:
 * क्रम में सौवीं संख्या की गणना करें:

प्रक्रिया तर्कों के मूल्यांकन का क्रम
अधिकांश लिस्प्स प्रक्रिया तर्कों के मूल्यांकन के क्रम को निर्दिष्ट करते हैं। योजना नहीं है। मूल्यांकन का क्रम - जिसमें ऑपरेटर की स्थिति में अभिव्यक्ति का मूल्यांकन किया जाता है - कॉल-बाय-कॉल के आधार पर एक कार्यान्वयन द्वारा चुना जा सकता है, और एकमात्र बाधा यह है कि ऑपरेटर और ऑपरेंड के समवर्ती मूल्यांकन का प्रभाव अभिव्यक्ति मूल्यांकन के कुछ अनुक्रमिक क्रम के अनुरूप होने के लिए विवश है। (R5RS सेकंड। 4.1.3) <वाक्यविन्यास लैंग = योजना> (चलो ((ईवी (लैम्ब्डा (एन)) (मूल्यांकन प्रदर्शित करें)                    (प्रदर्शन (यदि (प्रक्रिया? एन) प्रक्रिया एन))                    (न्यूलाइन) एन))) ((ईवी +) (ईवी 1) (ईवी 2))) ===> 3 </वाक्यविन्यास हाइलाइट> <वाक्यविन्यास प्रकाश लैंग = आउटपुट> मूल्यांकन 1 मूल्यांकन 2 मूल्यांकन प्रक्रिया </वाक्यविन्यास हाइलाइट> ev एक ऐसी प्रक्रिया है जो इसे दिए गए तर्क का वर्णन करती है, फिर तर्क का मान लौटाती है। अन्य लिस्प्स के विपरीत, एक योजना अभिव्यक्ति की ऑपरेटर स्थिति (पहली वस्तु) में एक अभिव्यक्ति की उपस्थिति काफी कानूनी है, जब तक कि ऑपरेटर की स्थिति में अभिव्यक्ति का परिणाम एक प्रक्रिया है।

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

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

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

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

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

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

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

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

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

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

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

<वाक्यविन्यास लैंग = योजना> (परिभाषित करें (एक्सपीआर का मूल्यांकन करें)  (eval expr (बातचीत-पर्यावरण))) </वाक्यविन्यास हाइलाइट>

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

बूलियन अभिव्यक्तियों में गैर-बूलियन मूल्यों का उपचार
सामान्य लिस्प सहित लिस्प की अधिकांश बोलियों में, सम्मेलन द्वारा मूल्य  बूलियन व्यंजक में गलत मान का मूल्यांकन करता है। योजना में, 1991 में IEEE मानक के बाद से, सभी मूल्यों को छोड़कर , शामिल  योजना में समकक्ष जो इस रूप में लिखा गया है  , बूलियन व्यंजक में सही मान का मूल्यांकन करें। (R5RS सेकंड। 6.3.1)

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

आदिम डेटाटाइप्स की विसंगति
योजना में आदिम डेटाटाइप अलग हैं। निम्न में से केवल एक विधेय किसी भी योजना वस्तु के लिए सही हो सकता है:,  ,  ,  ,  ,  ,  ,  ,. (R5RS सेकंड 3.2)

संख्यात्मक डेटा प्रकार के भीतर, इसके विपरीत, संख्यात्मक मान ओवरलैप होते हैं। उदाहरण के लिए, एक पूर्णांक मान सभी को संतुष्ट करता है,  ,  ,   और   एक ही समय में भविष्यवाणी करता है। (R5RS सेकंड 6.2)

तुल्यता विधेय करती है
योजना में तीन अलग-अलग समतुल्य वस्तुओं के बीच तीन अलग-अलग प्रकार की तुल्यता है, जो तीन अलग-अलग तुल्यता विधेय, समानता के परीक्षण के लिए संबंधपरक संचालकों द्वारा निरूपित की जाती है,,   और  :
 * का मूल्यांकन करता है  जब तक इसके पैरामीटर स्मृति में समान डेटा ऑब्जेक्ट का प्रतिनिधित्व नहीं करते;
 * आम तौर पर जैसा ही होता है  लेकिन आदिम वस्तुओं (जैसे वर्ण और संख्या) को विशेष रूप से व्यवहार करता है ताकि समान मान का प्रतिनिधित्व करने वाली संख्याएँ हों   भले ही वे एक ही वस्तु का उल्लेख न करते हों;
 * यह निर्धारित करने के लिए डेटा संरचनाओं जैसे सूचियों, वैक्टर और स्ट्रिंग्स की तुलना करता है कि क्या उनके पास सर्वांगसम संरचना है और  सामग्री। (R5RS सेकंड। 6.1)

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

टिप्पणियाँ
R5RS मानक तक, योजना में मानक टिप्पणी अर्धविराम थी, जो शेष रेखा को योजना के लिए अदृश्य बना देती है। कई कार्यान्वयनों ने वैकल्पिक सम्मेलनों का समर्थन किया है जो टिप्पणियों को एक पंक्ति से अधिक विस्तारित करने की अनुमति देते हैं, और R6RS मानक उनमें से दो की अनुमति देता है: एक संपूर्ण एस-अभिव्यक्ति को एक टिप्पणी (या टिप्पणी की गई) में बदल दिया जा सकता है, इसके पहले  (SRFI 62 में पेश किया गया ) और एक बहुपंक्ति टिप्पणी या ब्लॉक टिप्पणी आसपास के पाठ द्वारा निर्मित की जा सकती है   और.

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

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

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

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

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

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

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

इनपुट के लिए समान प्रक्रियाएं प्रदान की जाती हैं। R5RS योजना विधेय प्रदान करती है  और. चरित्र इनपुट और आउटपुट के लिए,,  ,   और   उपलब्ध कराए गए। योजना के भाव लिखने और पढ़ने के लिए, योजना प्रदान करती है   और. रीड ऑपरेशन पर, यदि इनपुट पोर्ट फ़ाइल के अंत तक पहुँच गया है, तो लौटाया गया परिणाम फ़ाइल का अंत है, और इसे विधेय का उपयोग करके परीक्षण किया जा सकता है.

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

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

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

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

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

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

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

R3RS, संशोधित के बाद से मानकों के दस्तावेजों के शीर्षक का रूपn एल्गोरिथम भाषा योजना पर रिपोर्ट, ALGOL मानक दस्तावेज़ के शीर्षक का एक संदर्भ है, एल्गोरिद्मिक भाषा Algol 60 पर संशोधित रिपोर्ट, R3RS का सारांश पृष्ठ ALGOL 60 रिपोर्ट के सारांश पृष्ठ पर बारीकी से तैयार किया गया है.

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

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

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

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

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

कुछ प्रक्रियाएँ एक से अधिक पंक्तियों में दिखाई देती हैं क्योंकि उन्हें आसानी से भाषा में एक ही कार्य में वर्गीकृत नहीं किया जा सकता है। स्ट्रिंग और चरित्र प्रक्रियाएं जिनके नाम में -ci शामिल है, उनके तर्कों के बीच केस-स्वतंत्र तुलना करते हैं: एक ही वर्ण के अपर केस और लोअर केस संस्करणों को समान माना जाता है।

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

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

विभिन्न कार्यान्वयनों में काफी व्यापक समर्थन वाले SRFI में शामिल हैं:<ref name="srfi_support"></रेफरी>


 * 0: सुविधा-आधारित सशर्त विस्तार निर्माण
 * 1: सूची पुस्तकालय
 * 4: सजातीय संख्यात्मक वेक्टर डेटा प्रकार
 * 6: बेसिक स्ट्रिंग पोर्ट
 * 8: कई मूल्यों के लिए बाध्यकारी, प्राप्त करें
 * 9: रिकॉर्ड प्रकार परिभाषित करना
 * 13: स्ट्रिंग लाइब्रेरी
 * 14: कैरेक्टर-सेट लाइब्रेरी
 * 16: वेरिएबल एरिटी की प्रक्रियाओं के लिए सिंटैक्स
 * 17: सामान्यीकृत सेट!
 * 18: मल्टीथ्रेडिंग सपोर्ट
 * 19: समय डेटा प्रकार और प्रक्रियाएं
 * 25: बहुआयामी सरणी आदिम
 * 26: करी के बिना मापदंडों की विशेषज्ञता के लिए संकेतन
 * 27: यादृच्छिक बिट्स के स्रोत
 * 28: मूल प्रारूप तार
 * 29: अंतर्राष्ट्रीयकरण और स्थानीयकरण
 * 30: नेस्टेड मल्टी-लाइन टिप्पणियाँ
 * 31: पुनरावर्ती मूल्यांकन के लिए एक विशेष रूप
 * 37: आर्ग्स-फोल्ड: एक प्रोग्राम तर्क प्रोसेसर
 * 39: पैरामीटर ऑब्जेक्ट
 * 41: स्ट्रीम (कंप्यूटिंग) एस
 * 42: सूची की समझ
 * 43: वेक्टर लाइब्रेरी
 * 45: पुनरावृत्त आलसी एल्गोरिदम को व्यक्त करने के लिए आदिम
 * 60: बिट्स के रूप में पूर्णांक
 * 61: एक अधिक सामान्य शर्त खंड
 * 66: ऑक्टेट वैक्टर
 * 67: प्रक्रियाओं की तुलना करें

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

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

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

उपयोग
योजना का व्यापक रूप से एक संख्या द्वारा उपयोग किया जाता है पिछले 12 वर्षों से, रैकेट (प्रोग्रामिंग भाषा) ने ProgramByDesign (पूर्व में TeachScheme!) प्रोजेक्ट चलाया है, जिसने लगभग 600 हाई स्कूल के शिक्षकों और हजारों हाई स्कूल के छात्रों को अल्पविकसित योजना प्रोग्रामिंग के लिए उजागर किया है। MIT की पुरानी परिचयात्मक प्रोग्रामिंग कक्षा 6.001 को योजना में पढ़ाया गया था, रेफरी नाम = 6.001 > हालांकि 6.001 को और अधिक आधुनिक पाठ्यक्रमों से बदल दिया गया है, SICP को MIT में पढ़ाया जाना जारी है। गुलाब-Hulman अपने अधिक उन्नत प्रोग्रामिंग लैंग्वेज कॉन्सेप्ट कोर्स में स्कीम का उपयोग करता है। ब्रैंडिस विश्वविद्यालय का कोर कोर्स, स्ट्रक्चर एंड इंटरप्रिटेशन ऑफ कंप्यूटर प्रोग्राम्स (COSI121b), भी विशेष रूप से सैद्धांतिक कंप्यूटर वैज्ञानिक हैरी मैरसन द्वारा स्कीम में पढ़ाया जाता है। इंडियाना विश्वविद्यालय की परिचयात्मक कक्षा, C211, पूरी तरह से स्कीम में पढ़ाई जाती है। पाठ्यक्रम का एक स्व-पुस्तक संस्करण, सीएस 61एएस, योजना का उपयोग करना जारी रखता है। येल और ग्रिनेल कॉलेज में परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रम भी स्कीम में पढ़ाए जाते हैं। जबकि कार्यात्मक प्रोग्रामिंग को तीसरे सेमेस्टर पाठ्यक्रम CSCI 2041 में विस्तार से शामिल किया गया है। संदर्भ नाम = umn3 >CSCI 2041—नया पाठ्यक्रम CSE पाठ्यचर्या समिति, मिनेसोटा विश्वविद्यालय (2019 में देखा गया) -10-25) सॉफ्टवेयर उद्योग में, टाटा कंसल्टेंसी सर्विसेज, एशिया की सबसे बड़ी सॉफ्टवेयर कंसल्टेंसी फर्म, नए कॉलेज स्नातकों के लिए अपने महीने भर चलने वाले प्रशिक्षण कार्यक्रम में स्कीम का उपयोग करती है। योजना का उपयोग निम्नलिखित के लिए भी किया गया है/किया गया था:

रेफरी नाम = एंड्रॉइड></रेफरी>
 * द दस्तावेज़ शैली शब्दार्थ और विशिष्टता भाषा (DSSSL), जो SGML स्टाइल शीट (वेब ​​डेवलपमेंट) को निर्दिष्ट करने की एक विधि प्रदान करता है, एक स्कीम सबसेट का उपयोग करता है।
 * जाने-माने खुला स्रोत सॉफ्टवेयर रेखापुंज ग्राफिक्स संपादक GIMP एक स्क्रिप्टिंग भाषा के रूप में TinyScheme का उपयोग करता है।
 * [[जीएनयू गुइल]] को जीएनयू प्रोजेक्ट द्वारा अपनी आधिकारिक स्क्रिप्टिंग भाषा के रूप में अपनाया गया है, और योजना का कार्यान्वयन एक्सटेंशन के लिए स्क्रिप्टिंग भाषा के रूप में जीएनयू लिलीपॉन्ड और जीएनयूकैश जैसे अनुप्रयोगों में एम्बेडेड है। इसी तरह, गाइल डेस्कटॉप वातावरण सूक्ति के लिए स्क्रिप्टिंग भाषा हुआ करती थी, और GNOME के ​​पास अभी भी एक प्रोजेक्ट है जो इसके लाइब्रेरी स्टैक को गुइल बाइंडिंग प्रदान करता है।
 * फ़ाइनल फ़ैंटेसी: द स्पिरिट्स विदिन फ़िल्म के वरिष्ठ प्रोग्रामर शिरो कवाई ने रीयल-टाइम रेंडरिंग इंजन के प्रबंधन के लिए स्क्रिप्टिंग भाषा के रूप में स्कीम का उपयोग किया।<ref name="shiro_kawai"></रेफरी>
 * एंड्रॉइड (ऑपरेटिंग सिस्टम) के लिए Google ऐप आविष्कारक योजना का उपयोग करता है, जहां कावा (योजना कार्यान्वयन) का उपयोग Android उपकरणों पर चलने वाली जावा वर्चुअल मशीन के लिए योजना कोड को बाइट-कोड में संकलित करने के लिए किया जाता है।

यह भी देखें

 * आधार के रूप में योजना का उपयोग प्रोग्रामिंग भाषाओं की अनिवार्यता, पाठ्यपुस्तक की अनिवार्यता

अग्रिम पठन

 * An Introduction to Scheme and its Implementation (a mirror)

बाहरी संबंध

 * schemers.org provides links to a number of Scheme resources including the specifications
 * Scheme Weekly
 * Bookmarklet that add Interactive Scheme REPL to any website
 * Scheme Weekly
 * Bookmarklet that add Interactive Scheme REPL to any website
 * Scheme Weekly
 * Bookmarklet that add Interactive Scheme REPL to any website