जवाबों:
रैकेट अंततः R5RS पर आधारित होता है, न कि R6RS पर और न ही एक सख्त सुपरसेट के आधार पर। मुझे नहीं लगता कि इसे 'स्कीम' कहा जा सकता है क्योंकि यह किसी स्कीम के मानक के अनुरूप नहीं है।
अधिकांश कार्यान्वयन एक्सटेंशन प्रदान करते हैं, लेकिन अन्यथा पीछे की ओर संगत होते हैं, निश्चित रूप से, संकलक जो रैकेट के साथ आता है वह R5RS या R6RS मोड में भी चल सकता है। रैकेट मोड में चलने वाली वैध आर 5/6 आरएस योजना या तो अस्वीकार कर दी जा सकती है, रनटाइम त्रुटियों का कारण बन सकती है, या इसके साथ अलग व्यवहार करना चाहिए। उस के साथ कहा, मुख्य बिंदुओं जहां यह पीछे की ओर संगत नहीं है:
set-cdr!
और नहीं है set-car!
, बल्कि set-mcar!
केवल जोड़े पर काम करता है जो विशेष रूप से उत्परिवर्तित के रूप में बनाया गया है।letrec
को क्या कहा जाता letrec*
है और R5RS में मौजूद नहीं है, R5RS और R6RS कॉल letrec
को Racket में मौजूद नहीं है।( ... )
और [ ... ]
समकक्ष के रूप में, R5RS नहीं करता है, लेकिन R6RS करता है।शायद और भी हैं, लेकिन अधिकांश अन्य हिस्सों पर रैकेट स्कीम का सुपरसेट है।
()
आत्म मूल्यांकन का विचार लगता है , मैं उस एक के साथ भ्रमित था। मुझे वास्तव में कभी भी ()
योजना में स्व-मूल्यांकन क्यों नहीं मिला क्योंकि यह आम लिस्प में है।
#%app
, हालांकि:#lang racket (require (rename-in racket [#%app old])) (define-syntax #%app (syntax-rules () [(_) '()] [(_ . rest) (old . rest)])) (null? ()) ;; => #t
इसमें अपरिवर्तनीय सूचियाँ शामिल हैं, जैसा कि ऊपर बताया गया है। इसमें एक संरचना प्रणाली भी शामिल है जो R6RS रिकॉर्ड सिस्टम की तुलना में थोड़ा साफ है। इसमें ऑब्जेक्ट ओरिएंटेड क्लास और ऑब्जेक्ट सिस्टम है। इसमें अनुबंध द्वारा डिजाइन के लिए मूल समर्थन है। इसमें एक यूनिट सिस्टम ML मॉड्यूल सिस्टम की याद दिलाता है, साथ ही R6RS मॉड्यूल सिस्टम की तरह एक मॉड्यूल सिस्टम है। मुझे यकीन है कि मैंने जितनी चीजों का उल्लेख किया है, मैं भूल गया हूं।
मुझे यकीन नहीं है कि नामकरण एक विपणन नौटंकी के अलावा कुछ के रूप में उपयोगी था, लेकिन रैकेट निश्चित रूप से योजना की एक अलग बोली है।
PLT स्कीम से रैकेट तक के नाम-परिवर्तन के औचित्य पर रैकेट साइट पर चर्चा की गई है ।
योजना प्रोग्रामिंग भाषा पर भाषा विनिर्देश R5RS कई योजना कार्यान्वयनकर्ताओं के बीच आम सहमति पर आधारित है। इसका मतलब यह है कि भाषा बहुत स्थिर है। इसका तात्पर्य यह भी है कि कई उपयोगी सुविधाएँ R5RS मानक का हिस्सा नहीं हैं।
रैकेट ने R5RS पर निर्माण किया है और इसे बहुत बढ़ाया है। कुछ एक्सटेंशन को मैक्रोज़ के रूप में परिभाषित किया जाता है, लेकिन कुछ सुविधाओं को रनटाइम सिस्टम के समर्थन की आवश्यकता होती है।
अकेले मैक्रों द्वारा लागू नहीं की गई रैकेट में विशेषताएं:
मॉड्यूल और मैक्रो सिस्टम RnRS विनिर्देश की तुलना में बहुत अधिक सामान्य हैं। #lang
पाठक / भाषा विनिर्देश के साथ मिलकर कस्टम भाषाओं (कस्टम सिंटैक्स के साथ) को परिभाषित करना और सामान्य रैकेट कार्यक्रमों के साथ उनका उपयोग करना संभव बनाता है।
कुछ मामलों में रैकेट ने निर्माण किया है जिसका व्यवहार R5RS से विचलित होता है। सबसे स्पष्ट एक cons
अचल जोड़ी का mcons
निर्माण कर रहा है ( एक परस्पर जोड़ी का निर्माण करता है)। एक अपरिवर्तनीय जोड़े होने का एक फायदा यह है कि length
अब O (1) परिचालित समय में चलता है।
रैकेट में R6RS योजना में शामिल बहुत सारे अच्छे भाषा निर्माण शामिल नहीं हैं, जैसे "मैच" ।
match
यह बहुत अच्छा है, लेकिन सौभाग्य से यह सिर्फ एक मैक्रो है इसलिए इसे आसानी से लिस्प्स में जोड़ा जा सकता है जो इसके पास नहीं है। आम लिस्प के माध्यम से सूचियों पर प्रकाश पैटर्न मिलान कर सकते हैं destructuring-bind
। इसके destructuring-case
आधार पर मैक्रो लिखना सरल है , और कई लोगों के पास है। योजना के लिए पोर्टेबल match
पुस्तकालय हैं। क्लोजर है core.match
।
()
में अमान्य है, स्व-मूल्यांकन नहीं। इसके अलावा, रैकेट करता है और अधिक प्रतिबंधित कर दिया हैletrec
- उदाहरण के लिए, में एकr5rs
भाषा; यहletrec*
डिफ़ॉल्ट भाषा में समान संस्करण का उपयोग करने का एक जानबूझकर विकल्प है ।