स्कीम (प्रोग्रामिंग भाषा)
![]() | |
Paradigms | Multi-paradigm: functional, imperative, meta |
---|---|
परिवार | Lisp |
द्वारा डिज़ाइन किया गया | Guy L. Steele Gerald Jay Sussman |
पहली प्रस्तुति | 1975 |
Stable release | R7RS
/ 2013 |
टाइपिंग अनुशासन | Dynamic, latent, strong |
स्कोप | Lexical |
फ़ाइल नाम एक्सटेंशनएस | .scm, .ss |
वेबसाइट | www |
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] और एक वास्तविक मानक जिसे संशोधित कहा जाता हैn एल्गोरिदमिक भाषा योजना (आरएनआरएस) पर रिपोर्ट। एक व्यापक रूप से कार्यान्वित मानक R5RS (1998) है।[2] योजना का सबसे हाल ही में स्वीकृत मानक R7RS-छोटा (2013) है।[3] 2007 में अधिक विस्तृत और मॉड्यूलर R6RS की पुष्टि की गई थी।[4] दोनों R5RS से अपने वंश का पता लगाते हैं; नीचे दी गई समयरेखा अनुसमर्थन के कालानुक्रमिक क्रम को दर्शाती है।
इतिहास
उत्पत्ति
योजना 1970 के दशक में कार्ल हेविट के अभिनेता मॉडल को समझने के प्रयास के रूप में शुरू हुई, जिसके लिए स्टील और सुस्मान ने Maclisp का उपयोग करके एक छोटा लिस्प दुभाषिया लिखा और फिर अभिनेता बनाने और संदेश भेजने के लिए तंत्र जोड़ा।[5] अन्य लिस्प (प्रोग्रामिंग भाषा)-व्युत्पन्न भाषाओं जैसे प्लानर (प्रोग्रामिंग भाषा) या कोनिवर की परंपरा में योजना को मूल रूप से स्कीमर कहा जाता था। वर्तमान नाम लेखकों के असंगत टाइमशेयरिंग सिस्टम के उपयोग से उत्पन्न हुआ है, जो फ़ाइल नामों को अधिकतम छह वर्णों के दो घटकों तक सीमित करता है। वर्तमान में, स्कीमर का उपयोग आमतौर पर स्कीम प्रोग्रामर को संदर्भित करने के लिए किया जाता है।
R6RS
2006 में एक R6RS मानक तैयार करने के लक्ष्य के साथ, 2003 की योजना कार्यशाला में एक नई भाषा मानकीकरण प्रक्रिया शुरू हुई। यह प्रक्रिया एकमत के पहले के RnRS दृष्टिकोण से अलग हो गई।
R6RS में एक मानक मॉड्यूल सिस्टम है, जो मूल भाषा और पुस्तकालयों के बीच विभाजन की अनुमति देता है। R6RS विनिर्देशन के कई ड्राफ्ट जारी किए गए, अंतिम संस्करण R5.97RS था। एक सफल वोट के परिणामस्वरूप 28 अगस्त, 2007 को घोषित नए मानक का अनुसमर्थन हुआ।[4]
वर्तमान में विभिन्न योजना कार्यान्वयनों की नवीनतम रिलीज़[6] R6RS मानक का समर्थन करता है। R6RS के लिए प्रस्तावित निहित रूप से चरणबद्ध पुस्तकालयों का एक पोर्टेबल संदर्भ कार्यान्वयन है, जिसे सिंटैक्स कहा जाता है, जो विभिन्न पुराने योजना कार्यान्वयनों पर खुद को ठीक से लोड और बूटस्ट्रैप करता है। रेफ नाम = सिंटैक्स>Abdulaziz Ghuloum (2007-10-27). "R6RS लाइब्रेरी और सिंटैक्स-केस सिस्टम (साइंटैक्स)". Ikarus Scheme. Retrieved 2009-10-20.</रेफरी>
R6RS की एक विशेषता रिकॉर्ड-टाइप डिस्क्रिप्टर (RTD) है। जब एक आरटीडी बनाया और उपयोग किया जाता है, तो रिकॉर्ड प्रकार का प्रतिनिधित्व मेमोरी लेआउट दिखा सकता है। इसने ऑब्जेक्ट फ़ील्ड बिट मास्क और म्यूटेबल स्कीम ऑब्जेक्ट फ़ील्ड बिट मास्क की भी गणना की, और कचरा संग्रहकर्ता को यह जानने में मदद की कि आरटीडी में सहेजी गई संपूर्ण फ़ील्ड सूची को ट्रेस किए बिना फ़ील्ड के साथ क्या करना है। आरटीडी उपयोगकर्ताओं को एक नया रिकॉर्ड सिस्टम बनाने के लिए मूल आरटीडी का विस्तार करने की अनुमति देता है। रेफरी>Keep, Andrew W.; Dybvig, R. Kent (November 2014). "स्कीम रिकॉर्ड प्रकारों का रन-टाइम प्रतिनिधित्व". Journal of Functional Programming. 24 (6): 675–716. doi:10.1017/S0956796814000203. S2CID 40001845.</रेफरी>
R6RS भाषा में कई महत्वपूर्ण बदलाव लाता है।[7] स्रोत कोड अब यूनिकोड में निर्दिष्ट किया गया है, और यूनिकोड वर्णों का एक बड़ा उपसमुच्चय अब स्कीम प्रतीकों और पहचानकर्ताओं में दिखाई दे सकता है, और शाब्दिक नियमों में अन्य छोटे बदलाव हैं। चरित्र डेटा अब यूनिकोड में भी निर्दिष्ट है। कई मानक प्रक्रियाओं को नए मानक पुस्तकालयों में स्थानांतरित कर दिया गया है, जो स्वयं मानक का एक बड़ा विस्तार करते हैं, जिसमें ऐसी प्रक्रियाएँ और वाक्यात्मक रूप शामिल हैं जो पहले मानक का हिस्सा नहीं थे। एक नया मॉड्यूल सिस्टम पेश किया गया है, और अपवाद प्रबंधन के लिए सिस्टम अब मानकीकृत हैं। सिंटैक्स-नियमों को एक अधिक अभिव्यंजक सिंटैक्टिक अमूर्त सुविधा (वाक्यविन्यास-केस) के साथ बदल दिया गया है जो मैक्रो विस्तार समय पर सभी योजनाओं के उपयोग की अनुमति देता है। योजना के पूर्ण संख्यात्मक टावर का समर्थन करने के लिए अब अनुपालन कार्यान्वयन की आवश्यकता है, और संख्याओं के शब्दार्थों का विस्तार किया गया है, मुख्य रूप से फ्लोटिंग पॉइंट संख्यात्मक प्रतिनिधित्व के लिए IEEE 754-1985 मानक के समर्थन की दिशा में।
R7RS
R6RS मानक विवाद का कारण बना है क्योंकि कुछ इसे अतिसूक्ष्म दर्शन से प्रस्थान के रूप में देखते हैं।Cite error: Closing </ref>
missing for <ref>
tag अगस्त 2009 में, योजना संचालन समिति, जो मानकीकरण प्रक्रिया की देखरेख करती है, ने योजना को दो भाषाओं में विभाजित करने की सिफारिश करने की अपनी मंशा की घोषणा की: प्रोग्रामर के लिए एक बड़ी आधुनिक प्रोग्रामिंग भाषा; और एक छोटा संस्करण, बड़े संस्करण का एक उपसमुच्चय शिक्षकों और आकस्मिक कार्यान्वयनकर्ताओं द्वारा प्रशंसा की गई अतिसूक्ष्मवाद को बरकरार रखता है।[8] योजना के इन दो नए संस्करणों पर काम करने के लिए दो कार्यकारी समूह बनाए गए थे। स्कीम रिपोर्ट प्रोसेस साइट में कार्य समूहों के चार्टर्स, सार्वजनिक चर्चाओं और ट्रैकिंग सिस्टम जारी करने के लिंक हैं।
R7RS (छोटी भाषा) का नौवां मसौदा 15 अप्रैल, 2013 को उपलब्ध कराया गया था। रेफरी नाम= r7rs-ड्राफ्ट-9 >"R7RS 9वां ड्राफ्ट उपलब्ध है" (PDF). 2013-04-15.</ref> इस मसौदे की पुष्टि करने वाला एक मत 20 मई 2013 को समाप्त हुआ,Cite error: Closing </ref>
missing for <ref>
tag
लैम्ब्डा कैलकुस
अलोंजो चर्च के गणितीय अंकन, लैम्ब्डा कैलकुस, ने लिस्प के लैम्ब्डा को एक प्रक्रिया शुरू करने के लिए एक कीवर्ड के रूप में उपयोग करने के साथ-साथ लिस्प में उच्च-क्रम के कार्यों के उपयोग से जुड़े कार्यात्मक प्रोग्रामिंग तकनीकों के विकास को प्रभावित करने के लिए प्रेरित किया है। लेकिन शुरुआती लिस्प्स लैम्ब्डा कैलकुस के उपयुक्त अभिव्यक्ति नहीं थे क्योंकि मुक्त चर और बाध्य चर के उपचार के कारण।[5]
एक औपचारिक लैम्ब्डा प्रणाली में स्वयंसिद्ध और एक पूर्ण गणना नियम होता है। यह गणितीय तर्क और उपकरणों का उपयोग करके विश्लेषण के लिए सहायक है। इस प्रणाली में, गणना को दिशात्मक कटौती के रूप में देखा जा सकता है। लैम्ब्डा कैलकुलस का सिंटैक्स x, y, z, ..., कोष्ठक, रिक्त स्थान, अवधि और प्रतीक λ से पुनरावर्ती अभिव्यक्तियों का अनुसरण करता है।[9] लैम्ब्डा गणना के कार्य में शामिल हैं: सबसे पहले, शक्तिशाली गणितीय तर्क के शुरुआती बिंदु के रूप में कार्य करें। दूसरा, यह कार्यान्वयन विवरण पर विचार करने के लिए प्रोग्रामर की आवश्यकता को कम कर सकता है, क्योंकि इसका उपयोग मशीन मूल्यांकन की नकल करने के लिए किया जा सकता है। अंत में, लैम्ब्डा गणना ने एक पर्याप्त मेटा-थ्योरी बनाई।[10]
लेक्सिकल स्कोप की शुरूआत ने लैम्ब्डा नोटेशन के कुछ रूपों और कार्यशील प्रोग्रामिंग भाषा में उनकी व्यावहारिक अभिव्यक्ति के बीच समानता बनाकर समस्या का समाधान किया। सुस्मान और स्टील ने दिखाया कि नई भाषा का उपयोग एल्गोल और फोरट्रान सहित अन्य प्रोग्रामिंग भाषाओं के सभी अनिवार्य और घोषणात्मक शब्दार्थों को सुरुचिपूर्ण ढंग से प्राप्त करने के लिए किया जा सकता है, और लैम्ब्डा अभिव्यक्तियों का उपयोग करके अन्य लिस्प्स के गतिशील दायरे को सरल प्रक्रिया तात्कालिकता के रूप में नहीं बल्कि नियंत्रण संरचनाओं के रूप में उपयोग किया जा सकता है। और पर्यावरण संशोधक।Cite error: Closing </ref>
missing for <ref>
tag
स्कीम में, डेटा को मैनिपुलेट और बाइंड करने के लिए उपयोग किए जाने वाले समान प्रिमिटिव का उपयोग प्रक्रियाओं को बाइंड करने के लिए किया जा सकता है। सामान्य लिस्प के समकक्ष कोई नहीं है defun
और #'
आदिम।
<वाक्यविन्यास लैंग = योजना>
- चर एक संख्या के लिए बाध्य
(एफ 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) के रूप में जाना जाता है।[2]). मानक इन्हें सार के रूप में मानता है, और कार्यान्वयनकर्ता को किसी विशेष आंतरिक अभ्यावेदन के लिए प्रतिबद्ध नहीं करता है।
संख्याओं में सटीकता का गुण हो सकता है। एक सटीक संख्या केवल सटीक संचालन के अनुक्रम द्वारा उत्पादित की जा सकती है जिसमें अन्य सटीक संख्याएं शामिल हैं- इस प्रकार अक्षमता संक्रामक है। मानक निर्दिष्ट करता है कि किन्हीं भी दो कार्यान्वयनों को सभी परिचालनों के लिए समान परिणाम उत्पन्न करना चाहिए जिसके परिणामस्वरूप सटीक संख्याएँ होती हैं।
R5RS मानक प्रक्रियाओं को निर्दिष्ट करता है exact->inexact
और inexact->exact
जिसका उपयोग किसी संख्या की सटीकता को बदलने के लिए किया जा सकता है। inexact->exact
सटीक संख्या उत्पन्न करता है जो तर्क के संख्यात्मक रूप से निकटतम है। exact->inexact
वह अचूक संख्या उत्पन्न करता है जो संख्यात्मक रूप से तर्क के निकटतम है। R6RS मानक इन प्रक्रियाओं को मुख्य रिपोर्ट से हटा देता है, लेकिन उन्हें मानक पुस्तकालय (rnrs r5rs (6)) में R5RS संगतता प्रक्रियाओं के रूप में निर्दिष्ट करता है।
R5RS मानक में, पूरे संख्यात्मक टॉवर को लागू करने के लिए योजना कार्यान्वयन की आवश्यकता नहीं है, लेकिन उन्हें कार्यान्वयन के उद्देश्यों और योजना की भाषा (R5RS सेकंड 6.2.3) की भावना दोनों के अनुरूप एक सुसंगत सबसेट लागू करना होगा।[2] नए R6RS मानक को पूरे टॉवर के कार्यान्वयन की आवश्यकता होती है, और व्यावहारिक रूप से असीमित आकार और परिशुद्धता के सटीक पूर्णांक ऑब्जेक्ट्स और सटीक परिमेय संख्या ऑब्जेक्ट्स, और कुछ प्रक्रियाओं को लागू करने के लिए ... इसलिए सटीक तर्क दिए जाने पर वे हमेशा सटीक परिणाम देते हैं (R6RS सेकंड। 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
- सटीकता की जाँच करें।
(सटीक? एक्सआर) ===> #एफ (सटीक? ग्यारहवीं) ===> #एफ </वाक्यविन्यास हाइलाइट>
दोनों कार्यान्वयन R5RS मानक के अनुरूप हैं लेकिन दूसरा R6RS के अनुरूप नहीं है क्योंकि यह पूर्ण संख्यात्मक टावर को लागू नहीं करता है।
विलंबित मूल्यांकन
योजना के माध्यम से विलंबित मूल्यांकन का समर्थन करता है delay
प्रपत्र और प्रक्रिया force
.
<वाक्यविन्यास लैंग = योजना> (10 परिभाषित करें) (eval-aplus2 को परिभाषित करें (विलंब (+ a 2))) (सेट! एक 20) (बल eval-aplus2) ===> 22 (eval-aplus50 परिभाषित करें (विलंब (+ a 50))) (चलो ((एक 8))
(बल eval-aplus50))
===> 70
(सेट! एक 100)
(बल eval-aplus2)
===> 22
</वाक्यविन्यास हाइलाइट>
वादे की मूल परिभाषा का शाब्दिक संदर्भ संरक्षित है, और इसका मूल्य पहले उपयोग के बाद भी संरक्षित है force
. वादा केवल एक बार मूल्यांकन किया जाता है।
ये प्रिमिटिव, जो फ़्यूचर्स और वादों के रूप में जाने जाने वाले मूल्यों का उत्पादन या संचालन करते हैं, का उपयोग उन्नत आलसी मूल्यांकन निर्माणों जैसे स्ट्रीम (कंप्यूटिंग) को लागू करने के लिए किया जा सकता है।[11] R6RS मानक में, ये अब आदिम नहीं हैं, बल्कि इसके बजाय, R5RS संगतता लाइब्रेरी (rnrs r5rs (6)) के हिस्से के रूप में प्रदान किए जाते हैं।
R5RS में, के कार्यान्वयन का सुझाव दिया delay
और force
दिया गया है, वादे को बिना किसी तर्क (एक थंक) के एक प्रक्रिया के रूप में लागू करना और यह सुनिश्चित करने के लिए memoization का उपयोग करना कि यह केवल एक बार मूल्यांकन किया जाता है, चाहे कितनी भी बार force
कहा जाता है (R5RS सेकंड। 6.4)।[2]
SRFI 41 असाधारण अर्थव्यवस्था के साथ परिमित और अनंत दोनों अनुक्रमों की अभिव्यक्ति को सक्षम बनाता है। उदाहरण के लिए, यह SRFI 41 में परिभाषित कार्यों का उपयोग करके फाइबोनैचि संख्या की परिभाषा है:[11]
<वाक्यविन्यास लैंग = योजना>
- फाइबोनैचि अनुक्रम को परिभाषित करें
(फाइब को परिभाषित करें
(धारा-विपक्ष 0 (धारा-विपक्ष 1 (स्ट्रीम-मैप + फाइबर (स्ट्रीम-सीडीआर फ़ाइब)))))
- क्रम में सौवीं संख्या की गणना करें
(स्ट्रीम-रेफ फाइबर 99) ===> 218922995834555169026 </वाक्यविन्यास हाइलाइट>
प्रक्रिया तर्कों के मूल्यांकन का क्रम
अधिकांश लिस्प्स प्रक्रिया तर्कों के मूल्यांकन के क्रम को निर्दिष्ट करते हैं। योजना नहीं है। मूल्यांकन का क्रम - जिसमें ऑपरेटर की स्थिति में अभिव्यक्ति का मूल्यांकन किया जाता है - कॉल-बाय-कॉल के आधार पर एक कार्यान्वयन द्वारा चुना जा सकता है, और एकमात्र बाधा यह है कि ऑपरेटर और ऑपरेंड के समवर्ती मूल्यांकन का प्रभाव अभिव्यक्ति मूल्यांकन के कुछ अनुक्रमिक क्रम के अनुरूप होने के लिए विवश है। (R5RS सेकंड। 4.1.3)[2]<वाक्यविन्यास लैंग = योजना> (चलो ((ईवी (लैम्ब्डा (एन)) (मूल्यांकन प्रदर्शित करें)
(प्रदर्शन (यदि (प्रक्रिया? एन) प्रक्रिया एन)) (न्यूलाइन) एन))) ((ईवी +) (ईवी 1) (ईवी 2)))
===> 3 </वाक्यविन्यास हाइलाइट> <वाक्यविन्यास प्रकाश लैंग = आउटपुट> मूल्यांकन 1 मूल्यांकन 2 मूल्यांकन प्रक्रिया </वाक्यविन्यास हाइलाइट> ev एक ऐसी प्रक्रिया है जो इसे दिए गए तर्क का वर्णन करती है, फिर तर्क का मान लौटाती है। अन्य लिस्प्स के विपरीत, एक योजना अभिव्यक्ति की ऑपरेटर स्थिति (पहली वस्तु) में एक अभिव्यक्ति की उपस्थिति काफी कानूनी है, जब तक कि ऑपरेटर की स्थिति में अभिव्यक्ति का परिणाम एक प्रक्रिया है।
प्रक्रिया को बुलाने में+1 और 2, भाव जोड़ने के लिए (ev +), (ev 1) और (ev 2) किसी भी क्रम में मूल्यांकन किया जा सकता है, जब तक कि प्रभाव ऐसा न हो जैसे कि उनका मूल्यांकन समानांतर में किया गया हो। इस प्रकार निम्नलिखित तीन पंक्तियों को किसी भी क्रम में मानक योजना द्वारा प्रदर्शित किया जा सकता है जब उपरोक्त उदाहरण कोड निष्पादित किया जाता है, हालांकि एक पंक्ति का पाठ दूसरे के साथ अंतःस्थापित नहीं किया जा सकता है क्योंकि यह अनुक्रमिक मूल्यांकन बाधा का उल्लंघन करेगा।
स्वच्छ मैक्रोज़
R5RS मानक में और बाद की रिपोर्ट में भी, योजना के सिंटैक्स को मैक्रो सिस्टम के माध्यम से आसानी से बढ़ाया जा सकता है। R5RS मानक ने एक शक्तिशाली हाइजीनिक मैक्रो सिस्टम पेश किया जो प्रोग्रामर को एक सरल पैटर्न मिलान उपभाषा (R5RS sec 4.3) का उपयोग करके भाषा में नए वाक्यात्मक निर्माण जोड़ने की अनुमति देता है।[2] इससे पहले, हाइजीनिक मैक्रो सिस्टम को R4RS मानक के परिशिष्ट के रूप में निम्न स्तर मैक्रो सिस्टम के साथ एक उच्च स्तरीय सिस्टम के रूप में हटा दिया गया था, दोनों को भाषा के एक अनिवार्य भाग के बजाय योजना के विस्तार के रूप में माना जाता था।[12]
हाइजेनिक मैक्रो सिस्टम के कार्यान्वयन को भी कहा जाता है syntax-rules
, शेष भाषा के शाब्दिक दायरे का सम्मान करना आवश्यक है। मैक्रो विस्तार के लिए विशेष नामकरण और स्कोपिंग नियमों द्वारा यह आश्वासन दिया गया है और सामान्य प्रोग्रामिंग त्रुटियों से बचा जाता है जो अन्य प्रोग्रामिंग भाषाओं के मैक्रो सिस्टम में हो सकती हैं। R6RS एक अधिक परिष्कृत परिवर्तन प्रणाली निर्दिष्ट करता है, syntax-case
, जो कुछ समय के लिए R5RS योजना के भाषा विस्तार के रूप में उपलब्ध है।
<वाक्यविन्यास लैंग = योजना>
- बहु-अभिव्यक्ति वाले if के भिन्नरूप को लागू करने के लिए मैक्रो को परिभाषित करें
- सच्ची शाखा और कोई झूठी शाखा नहीं।
(परिभाषित-वाक्यविन्यास कब
(वाक्यविन्यास-नियम () ((जब पूर्व ऍक्स्प ऍक्स्प ...) (अगर पूर्व (शुरू ऍक्स्प ऍक्स्प्स ...)))))
</वाक्यविन्यास हाइलाइट>
मैक्रोज़ और प्रक्रियाओं के आह्वान में घनिष्ठ समानता होती है - दोनों एस-एक्सप्रेशन हैं - लेकिन उनका अलग तरह से व्यवहार किया जाता है। जब कंपाइलर प्रोग्राम में एस-एक्सप्रेशन का सामना करता है, तो यह पहले यह देखने के लिए जांच करता है कि प्रतीक को वर्तमान लेक्सिकल स्कोप के भीतर सिंटैक्टिक कीवर्ड के रूप में परिभाषित किया गया है या नहीं। यदि ऐसा है, तो यह मैक्रो का विस्तार करने का प्रयास करता है, एस-एक्सप्रेशन की पूंछ में आइटमों का मूल्यांकन करने के लिए कोड को संकलित किए बिना तर्क के रूप में व्यवहार करता है, और यह प्रक्रिया पुनरावर्ती रूप से दोहराई जाती है जब तक कि कोई मैक्रो इनवोकेशन नहीं रहता। यदि यह एक सिंटैक्टिक कीवर्ड नहीं है, तो कंपाइलर एस-एक्सप्रेशन की पूंछ में तर्कों का मूल्यांकन करने के लिए कोड संकलित करता है और फिर एस-एक्सप्रेशन के शीर्ष पर प्रतीक द्वारा दर्शाए गए चर का मूल्यांकन करता है और इसे एक प्रक्रिया के रूप में कॉल करता है मूल्यांकित टेल एक्सप्रेशंस इसे वास्तविक तर्क के रूप में पारित किया गया।
अधिकांश योजना कार्यान्वयन अतिरिक्त मैक्रो सिस्टम भी प्रदान करते हैं। लोकप्रिय लोगों में हाइजीनिक मैक्रो#सिंटैक्टिक क्लोजर, हाइजीनिक मैक्रो#एक्सप्लिसिट रीनेमिंग और हैं define-macro
, एक गैर-स्वच्छ मैक्रो प्रणाली के समान defmacro
सामान्य लिस्प में प्रदान की गई प्रणाली।
मैक्रो स्वच्छ है या नहीं, यह निर्दिष्ट करने में असमर्थता मैक्रो सिस्टम की कमियों में से एक है। विस्तार के लिए वैकल्पिक मॉडल जैसे स्कोप सेट एक संभावित समाधान प्रदान करते हैं।[13]
पर्यावरण और eval
R5RS से पहले, योजना का कोई मानक समकक्ष नहीं था eval
प्रक्रिया जो अन्य लिस्प्स में सर्वव्यापी है, हालांकि पहले लैम्ब्डा पेपर ने वर्णित किया था evaluate
LISP फ़ंक्शन EVAL के समान[14]और 1978 में पहली संशोधित रिपोर्ट ने इसे बदल दिया enclose
, जिसने दो तर्क लिए। दूसरी, तीसरी और चौथी संशोधित रिपोर्ट में किसी भी समकक्ष को छोड़ दिया गया eval
.
इस भ्रम का कारण यह है कि योजना में इसके शाब्दिक दायरे के साथ एक अभिव्यक्ति का मूल्यांकन करने का परिणाम इस बात पर निर्भर करता है कि इसका मूल्यांकन कहाँ किया जाता है। उदाहरण के लिए, यह स्पष्ट नहीं है कि निम्नलिखित अभिव्यक्ति का मूल्यांकन करने का परिणाम 5 या 6 होना चाहिए:[15] <वाक्यविन्यास लैंग = योजना> (चलो ((नाम '+))
(चलो ((+ *)) (मूल्यांकन करें (सूची का नाम 2 3))))
</वाक्यविन्यास हाइलाइट>
यदि बाहरी वातावरण में इसका मूल्यांकन किया जाता है, जहां name
परिभाषित किया गया है, परिणाम ऑपरेंड का योग है। यदि इसका मूल्यांकन आंतरिक वातावरण में किया जाता है, जहां प्रतीक + को प्रक्रिया * के मान के लिए बाध्य किया गया है, परिणाम दो ऑपरेंड का उत्पाद है।
R5RS वातावरण लौटाने वाली तीन प्रक्रियाओं को निर्दिष्ट करके और एक प्रक्रिया प्रदान करके इस भ्रम को हल करता है eval
जो एक एस-अभिव्यक्ति और एक वातावरण लेता है और प्रदान किए गए वातावरण में अभिव्यक्ति का मूल्यांकन करता है। (R5RS सेकंड 6.5)[2] R6RS नामक एक प्रक्रिया प्रदान करके इसे विस्तारित करता है environment
जिसके द्वारा प्रोग्रामर सटीक रूप से निर्दिष्ट कर सकता है कि मूल्यांकन वातावरण में किन वस्तुओं को आयात करना है।
इस अभिव्यक्ति का मूल्यांकन करने के लिए आधुनिक योजना (आमतौर पर R5RS के साथ संगत) के साथ, एक फ़ंक्शन को परिभाषित करने की आवश्यकता होती है evaluate
जो इस तरह दिख सकता है:
<वाक्यविन्यास लैंग = योजना> (परिभाषित करें (एक्सपीआर का मूल्यांकन करें)
(eval expr (बातचीत-पर्यावरण)))
</वाक्यविन्यास हाइलाइट>
interaction-environment
दुभाषिया का वैश्विक वातावरण है।
बूलियन अभिव्यक्तियों में गैर-बूलियन मूल्यों का उपचार
सामान्य लिस्प सहित लिस्प की अधिकांश बोलियों में, सम्मेलन द्वारा मूल्य NIL
बूलियन व्यंजक में गलत मान का मूल्यांकन करता है। योजना में, 1991 में IEEE मानक के बाद से,[16]सभी मूल्यों को छोड़कर #f
, शामिल NIL
योजना में समकक्ष जो इस रूप में लिखा गया है '()
, बूलियन व्यंजक में सही मान का मूल्यांकन करें। (R5RS सेकंड। 6.3.1)[2]
जहां सत्य के बूलियन मान का प्रतिनिधित्व करने वाला स्थिरांक है T
अधिकांश लिस्प्स में, योजना में यह है #t
.
आदिम डेटाटाइप्स की विसंगति
योजना में आदिम डेटाटाइप अलग हैं। निम्न में से केवल एक विधेय किसी भी योजना वस्तु के लिए सही हो सकता है: boolean?
, pair?
, symbol?
, number?
, char?
, string?
, vector?
, port?
, procedure?
. (R5RS सेकंड 3.2)[2]
संख्यात्मक डेटा प्रकार के भीतर, इसके विपरीत, संख्यात्मक मान ओवरलैप होते हैं। उदाहरण के लिए, एक पूर्णांक मान सभी को संतुष्ट करता है integer?
, rational?
, real?
, complex?
और number?
एक ही समय में भविष्यवाणी करता है। (R5RS सेकंड 6.2)[2]
तुल्यता विधेय करती है
योजना में तीन अलग-अलग समतुल्य वस्तुओं के बीच तीन अलग-अलग प्रकार की तुल्यता है, जो तीन अलग-अलग तुल्यता विधेय, समानता के परीक्षण के लिए संबंधपरक संचालकों द्वारा निरूपित की जाती है, eq?
, eqv?
और equal?
:
eq?
का मूल्यांकन करता है#f
जब तक इसके पैरामीटर स्मृति में समान डेटा ऑब्जेक्ट का प्रतिनिधित्व नहीं करते;eqv?
आम तौर पर जैसा ही होता हैeq?
लेकिन आदिम वस्तुओं (जैसे वर्ण और संख्या) को विशेष रूप से व्यवहार करता है ताकि समान मान का प्रतिनिधित्व करने वाली संख्याएँ होंeqv?
भले ही वे एक ही वस्तु का उल्लेख न करते हों;equal?
यह निर्धारित करने के लिए डेटा संरचनाओं जैसे सूचियों, वैक्टर और स्ट्रिंग्स की तुलना करता है कि क्या उनके पास सर्वांगसम संरचना है औरeqv?
सामग्री। (R5RS सेकंड। 6.1)[2]
योजना में प्रकार पर निर्भर तुल्यता संचालन भी मौजूद हैं: string=?
और string-ci=?
दो स्ट्रिंग्स की तुलना करें (उत्तरार्द्ध केस-स्वतंत्र तुलना करता है); char=?
और char-ci=?
पात्रों की तुलना करें; =
संख्याओं की तुलना करता है।[2]
टिप्पणियाँ
R5RS मानक तक, योजना में मानक टिप्पणी अर्धविराम थी, जो शेष रेखा को योजना के लिए अदृश्य बना देती है। कई कार्यान्वयनों ने वैकल्पिक सम्मेलनों का समर्थन किया है जो टिप्पणियों को एक पंक्ति से अधिक विस्तारित करने की अनुमति देते हैं, और R6RS मानक उनमें से दो की अनुमति देता है: एक संपूर्ण एस-अभिव्यक्ति को एक टिप्पणी (या टिप्पणी की गई) में बदल दिया जा सकता है, इसके पहले #;
(SRFI 62 में पेश किया गया[17]) और एक बहुपंक्ति टिप्पणी या ब्लॉक टिप्पणी आसपास के पाठ द्वारा निर्मित की जा सकती है #|
और |#
.
इनपुट/आउटपुट
स्कीम का इनपुट और आउटपुट पोर्ट डेटाटाइप पर आधारित है। (R5RS सेकंड 6.6)[2] R5RS प्रक्रियाओं के साथ सुलभ दो डिफ़ॉल्ट पोर्ट को परिभाषित करता है current-input-port
और current-output-port
, जो मानक धाराओं की यूनिक्स धारणाओं के अनुरूप है। अधिकांश कार्यान्वयन भी प्रदान करते हैं current-error-port
. इनपुट और मानक आउटपुट का पुनर्निर्देशन (कंप्यूटिंग) मानक प्रक्रियाओं जैसे मानक में समर्थित है with-input-from-file
और with-output-to-file
. अधिकांश कार्यान्वयन समान पुनर्निर्देशन क्षमताओं के साथ स्ट्रिंग पोर्ट प्रदान करते हैं, SRFI 6 में वर्णित प्रक्रियाओं का उपयोग करते हुए, फाइलों के बजाय स्ट्रिंग बफ़र्स पर कई सामान्य इनपुट-आउटपुट संचालन को सक्षम करते हैं।[18] R6RS मानक बहुत अधिक परिष्कृत और सक्षम बंदरगाह प्रक्रियाओं और कई नए प्रकार के बंदरगाहों को निर्दिष्ट करता है।
निम्नलिखित उदाहरण सख्त R5RS योजना में लिखे गए हैं।
उदाहरण 1: आउटपुट डिफ़ॉल्ट (वर्तमान-आउटपुट-पोर्ट) के साथ: <वाक्यविन्यास लैंग = योजना> (चलो ((हैलो0 (लैम्ब्डा) (हैलो वर्ल्ड प्रदर्शित करें) (न्यूलाइन))))
(हैलो0))
</वाक्यविन्यास हाइलाइट>
उदाहरण 2: 1 के रूप में, लेकिन आउटपुट प्रक्रियाओं के लिए वैकल्पिक पोर्ट तर्क का उपयोग करना <वाक्यविन्यास लैंग = योजना> (चलो ((हैलो 1 (लैम्ब्डा (पी) (हैलो वर्ल्ड पी प्रदर्शित करें) (न्यूलाइन पी))))
(हैलो 1 (वर्तमान-आउटपुट-पोर्ट)))
</वाक्यविन्यास हाइलाइट>
उदाहरण 3: 1 के रूप में, लेकिन आउटपुट को नई बनाई गई फ़ाइल पर पुनर्निर्देशित किया जाता है <वाक्यविन्यास लैंग = योजना>
- एनबी
- आउटपुट-टू-फाइल के साथ R5RS में एक वैकल्पिक प्रक्रिया है
(चलो ((हैलो0 (लैम्ब्डा () (हैलो वर्ल्ड प्रदर्शित करें) (न्यूलाइन))))
(साथ-आउटपुट-टू-फाइल helloworldoutputfile hello0))
</वाक्यविन्यास हाइलाइट>
उदाहरण 4: 2 के रूप में, लेकिन फ़ाइल में आउटपुट भेजने के लिए स्पष्ट फ़ाइल खुली और बंदरगाह बंद है <वाक्यविन्यास लैंग = योजना> (चलो ((हैलो 1 (लैम्ब्डा (पी) (हैलो वर्ल्ड पी प्रदर्शित करें) (न्यूलाइन पी)))
(आउटपुट-पोर्ट (ओपन-आउटपुट-फाइल helloworldoutputfile ))) (हैलो 1 आउटपुट-पोर्ट) (क्लोज़-आउटपुट-पोर्ट आउटपुट-पोर्ट))
</वाक्यविन्यास हाइलाइट>
उदाहरण 5: 2 के रूप में, लेकिन फ़ाइल में आउटपुट भेजने के लिए कॉल-विद-आउटपुट-फाइल का उपयोग करने के साथ। <वाक्यविन्यास लैंग = योजना> (चलो ((हैलो 1 (लैम्ब्डा (पी) (हैलो वर्ल्ड पी प्रदर्शित करें) (न्यूलाइन पी))))
(कॉल-विद-आउटपुट-फाइल helloworldoutputfile hello1))
</वाक्यविन्यास हाइलाइट>
इनपुट के लिए समान प्रक्रियाएं प्रदान की जाती हैं। R5RS योजना विधेय प्रदान करती है input-port?
और output-port?
. चरित्र इनपुट और आउटपुट के लिए, write-char
, read-char
, peek-char
और char-ready?
उपलब्ध कराए गए। योजना के भाव लिखने और पढ़ने के लिए, योजना प्रदान करती है read
और write
. रीड ऑपरेशन पर, यदि इनपुट पोर्ट फ़ाइल के अंत तक पहुँच गया है, तो लौटाया गया परिणाम फ़ाइल का अंत है, और इसे विधेय का उपयोग करके परीक्षण किया जा सकता है eof-object?
.
मानक के अतिरिक्त, एसआरएफआई 28 सामान्य लिस्प के समान एक बुनियादी स्वरूपण प्रक्रिया को परिभाषित करता है format
कार्य, जिसके बाद इसका नाम दिया गया है।[19]
मानक प्रक्रियाओं की पुनर्व्याख्या
योजना में, प्रक्रियाएं चर के लिए बाध्य हैं। R5RS में भाषा मानक औपचारिक रूप से अनिवार्य है कि कार्यक्रम अंतर्निहित प्रक्रियाओं के चर बंधनों को बदल सकते हैं, उन्हें प्रभावी ढंग से पुनर्परिभाषित कर सकते हैं। (R5RS भाषा परिवर्तन )[2] उदाहरण के लिए, कोई विस्तार कर सकता है +
स्ट्रिंग्स के साथ-साथ संख्याओं को फिर से परिभाषित करके स्वीकार करने के लिए:
<वाक्यविन्यास लैंग = योजना> (सेट! +
(चलो ((मूल+ +)) (लैम्ब्डा तर्क देता है (लागू करें (अगर (या (शून्य? तर्क) (स्ट्रिंग? (कार तर्क))) स्ट्रिंग-जोड़ें मूल+) आर्ग्स))))
(+ 1 2 3) ===> 6 (+ 1 2 3 ) ===> 123 </वाक्यविन्यास हाइलाइट>
R6RS में मानक सहित प्रत्येक बंधन, कुछ पुस्तकालय से संबंधित है, और सभी निर्यातित बंधन अपरिवर्तनीय हैं। (R6RS सेकंड 7.1)[4] इस वजह से, उत्परिवर्तन द्वारा मानक प्रक्रियाओं को पुनर्परिभाषित करना प्रतिबंधित है। इसके बजाय, एक मानक प्रक्रिया के नाम से एक अलग प्रक्रिया आयात करना संभव है, जो वास्तव में पुनर्वितरण के समान है।
नामकरण और नामकरण परंपराएं
मानक योजना में, एक डेटाटाइप से दूसरे डेटाटाइप में परिवर्तित होने वाली प्रक्रियाओं में वर्ण स्ट्रिंग होती है -> उनके नाम पर, एक के साथ समाप्त होने की भविष्यवाणी करता है? , और प्रक्रियाएँ जो पहले से आवंटित डेटा के मान को बदल देती हैं, के साथ समाप्त हो जाती हैं ! . इन सम्मेलनों का अक्सर योजना प्रोग्रामर द्वारा पालन किया जाता है।
योजना मानकों जैसे औपचारिक संदर्भों में, लैम्ब्डा अभिव्यक्ति या आदिम प्रक्रिया को संदर्भित करने के लिए कार्य करने के लिए शब्द प्रक्रिया का उपयोग वरीयता में किया जाता है। सामान्य उपयोग में, शब्द प्रक्रिया और कार्य परस्पर विनिमय के लिए उपयोग किए जाते हैं। प्रक्रिया आवेदन को कभी-कभी औपचारिक रूप से संयोजन के रूप में संदर्भित किया जाता है।
अन्य लिस्प्स की तरह, थंक शब्द का उपयोग योजना में बिना किसी तर्क के एक प्रक्रिया को संदर्भित करने के लिए किया जाता है। प्रॉपर टेल रिकर्सन शब्द सभी योजना कार्यान्वयनों की संपत्ति को संदर्भित करता है, कि वे टेल-कॉल ऑप्टिमाइज़ेशन करते हैं ताकि सक्रिय टेल कॉल की अनिश्चित संख्या का समर्थन किया जा सके।
R3RS, संशोधित के बाद से मानकों के दस्तावेजों के शीर्षक का रूपn एल्गोरिथम भाषा योजना पर रिपोर्ट, ALGOL मानक दस्तावेज़ के शीर्षक का एक संदर्भ है, एल्गोरिद्मिक भाषा Algol 60 पर संशोधित रिपोर्ट, R3RS का सारांश पृष्ठ ALGOL 60 रिपोर्ट के सारांश पृष्ठ पर बारीकी से तैयार किया गया है .Cite error: Closing </ref>
missing for <ref>
tag
मानक रूपों और प्रक्रियाओं की समीक्षा
This section does not cite any sources. (May 2013) (Learn how and when to remove this template message) |
भाषा को औपचारिक रूप से मानकों R5RS (1998) और R6RS (2007) में परिभाषित किया गया है। वे मानक रूपों का वर्णन करते हैं: कीवर्ड और संबंधित सिंटैक्स, जो भाषा की नियंत्रण संरचना प्रदान करते हैं, और मानक प्रक्रियाएं जो सामान्य कार्य करती हैं।
मानक रूप
यह तालिका योजना में मानक रूपों का वर्णन करती है। कुछ रूप एक से अधिक पंक्तियों में दिखाई देते हैं क्योंकि उन्हें आसानी से भाषा में एक ही कार्य में वर्गीकृत नहीं किया जा सकता है।
इस तालिका में एल चिह्नित रूपों को मानक में व्युत्पन्न पुस्तकालय रूपों के रूप में वर्गीकृत किया गया है और अक्सर अभ्यास में अधिक मौलिक रूपों का उपयोग करके मैक्रोज़ के रूप में कार्यान्वित किया जाता है, जिससे कार्यान्वयन का कार्य अन्य भाषाओं की तुलना में अधिक आसान हो जाता है।
Purpose | Forms |
---|---|
Definition | define |
Binding constructs | lambda, do (L), let (L), let* (L), letrec (L) |
Conditional evaluation | if, cond (L), case (L), and (L), or (L) |
Sequential evaluation | begin (*) |
Iteration | lambda, do (L), named let (L) |
Syntactic extension | define-syntax, let-syntax, letrec-syntax, syntax-rules (R5RS), syntax-case (R6RS) |
Quoting | quote('), unquote(,), quasiquote(`), unquote-splicing(,@) |
Assignment | set! |
Delayed evaluation | delay (L) |
ध्यान दें कि begin
R5RS में लाइब्रेरी सिंटैक्स के रूप में परिभाषित किया गया है, लेकिन विस्तारक को स्प्लिसिंग कार्यक्षमता प्राप्त करने के लिए इसके बारे में जानना आवश्यक है। R6RS में यह अब लाइब्रेरी सिंटैक्स नहीं है।
मानक प्रक्रियाएं
निम्नलिखित दो तालिकाएँ R5RS योजना में मानक प्रक्रियाओं का वर्णन करती हैं। R6RS कहीं अधिक व्यापक है और इस प्रकार का सारांश व्यावहारिक नहीं होगा।
कुछ प्रक्रियाएँ एक से अधिक पंक्तियों में दिखाई देती हैं क्योंकि उन्हें आसानी से भाषा में एक ही कार्य में वर्गीकृत नहीं किया जा सकता है।
Purpose | Procedures |
---|---|
Construction | vector, make-vector, make-string, list |
Equivalence predicates | eq?, eqv?, equal?, string=?, string-ci=?, char=?, char-ci=? |
Type conversion | vector->list, list->vector, number->string, string->number, symbol->string, string->symbol, char->integer, integer->char, string->list, list->string |
Numbers | See separate table |
Strings | 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 | 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 | make-vector, vector, vector?, vector-length, vector-ref, vector-set!, vector->list, list->vector, vector-fill! |
Symbols | symbol->string, string->symbol, symbol? |
Pairs and lists | 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 | boolean?, pair?, symbol?, number?, char?, string?, vector?, port?, procedure? |
Continuations | call-with-current-continuation (call/cc), values, call-with-values, dynamic-wind |
Environments | eval, scheme-report-environment, null-environment, interaction-environment (optional) |
Input/output | 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 | load (optional), transcript-on (optional), transcript-off (optional) |
Delayed evaluation | force |
Functional programming | procedure?, apply, map, for-each |
Booleans | boolean? not |
स्ट्रिंग और चरित्र प्रक्रियाएं जिनके नाम में -ci शामिल है, उनके तर्कों के बीच केस-स्वतंत्र तुलना करते हैं: एक ही वर्ण के अपर केस और लोअर केस संस्करणों को समान माना जाता है।
Purpose | Procedures |
---|---|
Basic arithmetic operators | +, -, *, /, abs, quotient, remainder, modulo, gcd, lcm, expt, sqrt |
Rational numbers | numerator, denominator, rational?, rationalize |
Approximation | floor, ceiling, truncate, round |
Exactness | inexact->exact, exact->inexact, exact?, inexact? |
Inequalities | <, <= , >, >=, = |
Miscellaneous predicates | zero?, negative?, positive? odd? even? |
Maximum and minimum | max, min |
Trigonometry | sin, cos, tan, asin, acos, atan |
Exponentials | exp, log |
Complex numbers | make-rectangular, make-polar, real-part, imag-part, magnitude, angle, complex? |
Input-output | number->string, string->number |
Type predicates | integer?, rational?, real?, complex?, number? |
- और / के कार्यान्वयन जो दो से अधिक तर्क लेते हैं परिभाषित हैं लेकिन R5RS पर वैकल्पिक छोड़ दिए गए हैं।
कार्यान्वयन के लिए योजना अनुरोध
योजना के अतिसूक्ष्मवाद के कारण, कई सामान्य प्रक्रियाएँ और वाक्यात्मक रूप मानक द्वारा परिभाषित नहीं किए गए हैं। मूल भाषा को छोटा रखने के लिए लेकिन विस्तार के मानकीकरण की सुविधा के लिए, योजना समुदाय के पास कार्यान्वयन के लिए एक योजना अनुरोध (SRFI) प्रक्रिया है जिसके द्वारा विस्तार प्रस्तावों की सावधानीपूर्वक चर्चा के माध्यम से विस्तार पुस्तकालयों को परिभाषित किया जाता है। यह कोड पोर्टेबिलिटी को बढ़ावा देता है। कई SRFI सभी या अधिकांश योजना कार्यान्वयन द्वारा समर्थित हैं।
विभिन्न कार्यान्वयनों में काफी व्यापक समर्थन वाले SRFI में शामिल हैं:Cite error: Closing </ref>
missing for <ref>
tag जिनमें से अधिकांश एक दूसरे से इतने भिन्न हैं कि कार्यक्रमों को एक कार्यान्वयन से दूसरे कार्यान्वयन में पोर्ट करना काफी कठिन है, और मानक भाषा के छोटे आकार का अर्थ है कि मानक, पोर्टेबल योजना में किसी भी बड़ी जटिलता का एक उपयोगी कार्यक्रम लिखना लगभग असंभव।[8]प्रोग्रामरों के लिए अपनी अपील को व्यापक बनाने के प्रयास में, R6RS मानक बहुत व्यापक भाषा निर्दिष्ट करता है।
लगभग सभी कार्यान्वयन विकास और डिबगिंग के लिए एक पारंपरिक लिस्प-शैली रीड-इवल-प्रिंट लूप प्रदान करते हैं। निष्पादन योग्य बाइनरी के लिए कई कंपाइलर स्कीम प्रोग्राम भी हैं। अन्य भाषाओं में लिखे गए प्रोग्रामों में स्कीम कोड एम्बेड करने के लिए समर्थन भी आम है, क्योंकि स्कीम के कार्यान्वयन की सापेक्ष सरलता इसे C (प्रोग्रामिंग लैंग्वेज) जैसी भाषाओं में विकसित बड़ी प्रणालियों में स्क्रिप्टिंग क्षमताओं को जोड़ने के लिए एक लोकप्रिय विकल्प बनाती है। गैम्बिट (योजना कार्यान्वयन), चिकन (योजना कार्यान्वयन), और बिगलू योजना दुभाषिए योजना को सी में संकलित करते हैं, जो एम्बेडिंग को विशेष रूप से आसान बनाता है। इसके अलावा, बिगलू के कंपाइलर को जावा वर्चुअल मशीन बाईटकोड उत्पन्न करने के लिए कॉन्फ़िगर किया जा सकता है, और इसमें .NET Framework|.NET के लिए एक प्रायोगिक बायटेकोड जनरेटर भी है।
कुछ कार्यान्वयन अतिरिक्त सुविधाओं का समर्थन करते हैं। उदाहरण के लिए, कावा (योजना कार्यान्वयन) और JScheme जावा कक्षाओं के साथ एकीकरण प्रदान करते हैं, और योजना सी संकलक के लिए योजना अक्सर सी में लिखी गई बाहरी पुस्तकालयों का उपयोग करना आसान बनाती है, योजना स्रोत में वास्तविक सी कोड को एम्बेड करने की अनुमति देने तक। एक अन्य उदाहरण प्राइवेट है, जो योजना के सीखने का समर्थन करने के लिए दृश्य उपकरणों का एक सेट प्रदान करता है।
उपयोग
योजना का व्यापक रूप से एक संख्या द्वारा उपयोग किया जाता हैCite error: Closing </ref>
missing for <ref>
tag पिछले 12 वर्षों से, रैकेट (प्रोग्रामिंग भाषा) ने ProgramByDesign (पूर्व में TeachScheme!) प्रोजेक्ट चलाया है, जिसने लगभग 600 हाई स्कूल के शिक्षकों और हजारों हाई स्कूल के छात्रों को अल्पविकसित योजना प्रोग्रामिंग के लिए उजागर किया है। MIT की पुरानी परिचयात्मक प्रोग्रामिंग कक्षा 6.001 को योजना में पढ़ाया गया था, रेफरी नाम = 6.001 >Eric Grimson (Spring 2005). "6.001 कंप्यूटर प्रोग्राम की संरचना और व्याख्या". MIT Open Courseware. Retrieved 2009-10-20.</ref> हालांकि 6.001 को और अधिक आधुनिक पाठ्यक्रमों से बदल दिया गया है, SICP को MIT में पढ़ाया जाना जारी है।[20][21] गुलाब-Hulman अपने अधिक उन्नत प्रोग्रामिंग लैंग्वेज कॉन्सेप्ट कोर्स में स्कीम का उपयोग करता है।[22] ब्रैंडिस विश्वविद्यालय का कोर कोर्स, स्ट्रक्चर एंड इंटरप्रिटेशन ऑफ कंप्यूटर प्रोग्राम्स (COSI121b), भी विशेष रूप से सैद्धांतिक कंप्यूटर वैज्ञानिक हैरी मैरसन द्वारा स्कीम में पढ़ाया जाता है।[23] इंडियाना विश्वविद्यालय की परिचयात्मक कक्षा, C211, पूरी तरह से स्कीम में पढ़ाई जाती है। पाठ्यक्रम का एक स्व-पुस्तक संस्करण, सीएस 61एएस, योजना का उपयोग करना जारी रखता है।[24] येल और ग्रिनेल कॉलेज में परिचयात्मक कंप्यूटर विज्ञान पाठ्यक्रम भी स्कीम में पढ़ाए जाते हैं।[25] जबकि कार्यात्मक प्रोग्रामिंग को तीसरे सेमेस्टर पाठ्यक्रम CSCI 2041 में विस्तार से शामिल किया गया है। संदर्भ नाम = umn3 >CSCI 2041—नया पाठ्यक्रम CSE पाठ्यचर्या समिति, मिनेसोटा विश्वविद्यालय (2019 में देखा गया) -10-25)</ref> सॉफ्टवेयर उद्योग में, टाटा कंसल्टेंसी सर्विसेज, एशिया की सबसे बड़ी सॉफ्टवेयर कंसल्टेंसी फर्म, नए कॉलेज स्नातकों के लिए अपने महीने भर चलने वाले प्रशिक्षण कार्यक्रम में स्कीम का उपयोग करती है।[citation needed]
योजना का उपयोग निम्नलिखित के लिए भी किया गया है/किया गया था:
- द दस्तावेज़ शैली शब्दार्थ और विशिष्टता भाषा (DSSSL), जो SGML स्टाइल शीट (वेब डेवलपमेंट) को निर्दिष्ट करने की एक विधि प्रदान करता है, एक स्कीम सबसेट का उपयोग करता है।[26]
- जाने-माने खुला स्रोत सॉफ्टवेयर रेखापुंज ग्राफिक्स संपादक GIMP एक स्क्रिप्टिंग भाषा के रूप में TinyScheme का उपयोग करता है।[27]
- [[जीएनयू गुइल]] को जीएनयू प्रोजेक्ट द्वारा अपनी आधिकारिक स्क्रिप्टिंग भाषा के रूप में अपनाया गया है, और योजना का कार्यान्वयन एक्सटेंशन के लिए स्क्रिप्टिंग भाषा के रूप में जीएनयू लिलीपॉन्ड और जीएनयूकैश जैसे अनुप्रयोगों में एम्बेडेड है। इसी तरह, गाइल डेस्कटॉप वातावरण सूक्ति के लिए स्क्रिप्टिंग भाषा हुआ करती थी,[28] और GNOME के पास अभी भी एक प्रोजेक्ट है जो इसके लाइब्रेरी स्टैक को गुइल बाइंडिंग प्रदान करता है।Cite error: Closing
</ref>
missing for<ref>
tag - फ़ाइनल फ़ैंटेसी: द स्पिरिट्स विदिन फ़िल्म के वरिष्ठ प्रोग्रामर शिरो कवाई ने रीयल-टाइम रेंडरिंग इंजन के प्रबंधन के लिए स्क्रिप्टिंग भाषा के रूप में स्कीम का उपयोग किया।<ref name="shiro_kawai">Kawai, Shiro (October 2002). "ग्लूइंग थिंग्स टुगेदर - स्कीम इन रियल-टाइम सीजी कंटेंट प्रोडक्शन". Proceedings of the First International Lisp Conference, San Francisco: 342–348. Retrieved 2012-08-09.</रेफरी>
- एंड्रॉइड (ऑपरेटिंग सिस्टम) के लिए Google ऐप आविष्कारक योजना का उपयोग करता है, जहां कावा (योजना कार्यान्वयन) का उपयोग Android उपकरणों पर चलने वाली जावा वर्चुअल मशीन के लिए योजना कोड को बाइट-कोड में संकलित करने के लिए किया जाता है।
रेफरी नाम = एंड्रॉइड>Bill Magnuson; Hal Abelson & Mark Friedman (2009-08-11). "Android के लिए ऐप आविष्कारक के दायरे में". Google Inc, Official Google Research blog. Retrieved 2012-08-09.</रेफरी>
यह भी देखें
- आधार के रूप में योजना का उपयोग प्रोग्रामिंग भाषाओं की अनिवार्यता, पाठ्यपुस्तक की अनिवार्यता
संदर्भ
- ↑ कॉमन 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.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.
- ↑ "R7RS final available" (PDF). 2013-07-06.
- ↑ 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.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.
- ↑ "R6RS कार्यान्वयन". r6rs.org. Retrieved 2017-11-24.
- ↑ "एल्गोरिद्मिक लैंग्वेज स्कीम पर संशोधित^6 रिपोर्ट, परिशिष्ट ई: भाषा परिवर्तन". Scheme Steering Committee. 2007-09-26. Retrieved 2009-10-20.
- ↑ 8.0 8.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) - ↑ 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.
- ↑ 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.
- ↑ 11.0 11.1 Philip L. Bewig (2008-01-24). "SRFI 41: Streams". The SRFI Editors, schemers.org. Retrieved 2012-08-09.
- ↑ 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.
- ↑ 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.
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs namedlambda_paper_1
- ↑ जोनाथन रीस, द स्कीम ऑफ़ थिंग्स द जून 1992 मीटिंग Archived 2011-07-16 at the Wayback Machine (पोस्टस्क्रिप्ट), लिस्प पॉइंटर्स में, वी (4), अक्टूबर-दिसंबर 1992। पुनःप्राप्त 2012-08-09
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs namedieee1178
- ↑ Taylor Campbell (2005-07-21). "SRFI 62: S-expression comments". The SRFI Editors, schemers.org. Retrieved 2012-08-09.
- ↑ William D Clinger (1999-07-01). "SRFI 6: Basic String Ports". The SRFI Editors, schemers.org. Retrieved 2012-08-09.
- ↑ Scott G. Miller (2002-06-25). "SRFI 28: Basic Format Strings". The SRFI Editors, schemers.org. Retrieved 2012-08-09.
- ↑ 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 के बुनियादी सिद्धांत, पूर्वोत्तर विश्वविद्यालय
- ↑ CS 1101: Introduction to Program Design (A05): course software, Worcester Polytechnic Institute
- ↑ "CSSE 304: Programming Language Concepts". Rose-Hulman Institute of Technology.
- ↑ "Spring 2021 CS121b Syllabus" (PDF). Brandeis University.
- ↑ "Home". berkeley-cs61as.github.io.
- ↑ 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 तक पहुँचा)
- ↑ Robin Cover (2002-02-25). "DSSSL - Document Style Semantics and Specification Language. ISO/IEC 10179:1996". Cover Pages. Retrieved 2012-08-09.
- ↑ "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.
- ↑ 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.
अग्रिम पठन
- An Introduction to Scheme and its Implementation (a mirror)
- Christopher T. Haynes (1999-06-22). "The Scheme Programming Language Standardization Experience".
- Guy L. Steele Jr., Richard P. Gabriel. "The Evolution of Lisp" (PDF).
- Gerald Jay Sussman & Guy Lewis Steele Jr. (December 1975). . Vol. AI Memo 349. MIT Artificial Intelligence Lab. CiteSeerX 10.1.1.128.80 – via Wikisource.
बाहरी संबंध
- Scheme at Curlie
- schemers.org provides links to a number of Scheme resources including the specifications
Scheme Programming at Wikibooks
Write Yourself a Scheme in 48 Hours at Wikibooks
Media related to Scheme (programming language) at Wikimedia Commons
- Scheme Weekly
- Bookmarklet that add Interactive Scheme REPL to any website