कैसे है रैकेट स्कीम से अलग?


184

रैकेट स्कीम का वंशज है। R6RS की तुलना में रैकेट कैसे अलग है? इसने क्या जोड़ा, या छीन लिया, या बस अलग है?

मैं समझता हूं कि रैकेट भाषा से अधिक है, यह भाषाओं का एक मंच है। लेकिन मैं मुख्य रैकेट बोली का उल्लेख कर रहा हूं।

जवाबों:


132

रैकेट अंततः R5RS पर आधारित होता है, न कि R6RS पर और न ही एक सख्त सुपरसेट के आधार पर। मुझे नहीं लगता कि इसे 'स्कीम' कहा जा सकता है क्योंकि यह किसी स्कीम के मानक के अनुरूप नहीं है।

अधिकांश कार्यान्वयन एक्सटेंशन प्रदान करते हैं, लेकिन अन्यथा पीछे की ओर संगत होते हैं, निश्चित रूप से, संकलक जो रैकेट के साथ आता है वह R5RS या R6RS मोड में भी चल सकता है। रैकेट मोड में चलने वाली वैध आर 5/6 आरएस योजना या तो अस्वीकार कर दी जा सकती है, रनटाइम त्रुटियों का कारण बन सकती है, या इसके साथ अलग व्यवहार करना चाहिए। उस के साथ कहा, मुख्य बिंदुओं जहां यह पीछे की ओर संगत नहीं है:

  • रैकेट के पास कोई set-cdr!और नहीं है set-car!, बल्कि set-mcar!केवल जोड़े पर काम करता है जो विशेष रूप से उत्परिवर्तित के रूप में बनाया गया है।
  • R6RS में Racket कॉल letrecको क्या कहा जाता letrec*है और R5RS में मौजूद नहीं है, R5RS और R6RS कॉल letrecको Racket में मौजूद नहीं है।
  • रैकेट में, बहुत सारी चीजें स्व-मूल्यांकन कर रही हैं जो आर 5 आरएस में एक त्रुटि पैदा करेगा, सबसे महत्वपूर्ण रूप से खाली सूची
  • रैकेट केस सेंसिटिव है, हालांकि R6RS भी केस सेंसिटिव है
  • रैकेट इलाज करता है ( ... )और [ ... ]समकक्ष के रूप में, R5RS नहीं करता है, लेकिन R6RS करता है।

शायद और भी हैं, लेकिन अधिकांश अन्य हिस्सों पर रैकेट स्कीम का सुपरसेट है।


24
रैकेट ()में अमान्य है, स्व-मूल्यांकन नहीं। इसके अलावा, रैकेट करता है और अधिक प्रतिबंधित कर दिया है letrec- उदाहरण के लिए, में एक r5rsभाषा; यह letrec*डिफ़ॉल्ट भाषा में समान संस्करण का उपयोग करने का एक जानबूझकर विकल्प है ।
एली बरज़िल्ले

9
@ एली, वूप्स, आप सही कह रहे हैं, स्विंडल मोड में चलने वाले रैकेट को ()आत्म मूल्यांकन का विचार लगता है , मैं उस एक के साथ भ्रमित था। मुझे वास्तव में कभी भी ()योजना में स्व-मूल्यांकन क्यों नहीं मिला क्योंकि यह आम लिस्प में है।
Zorf

@Zorf इसे ओवरलोडिंग द्वारा आसानी से बदला जा सकता है #%app, हालांकि:#lang racket (require (rename-in racket [#%app old])) (define-syntax #%app (syntax-rules () [(_) '()] [(_ . rest) (old . rest)])) (null? ()) ;; => #t
Suzanne Dupéron

2
इस उत्तर को अद्यतन किया जाना चाहिए। रैकेट की सुविधा ने मॉड्यूल और भाषा परिभाषाओं आदि के साथ दूर की स्कीम की
रूपरेखा तय की है

1
@MaliRemorker मुझे ठीक से समझ में नहीं आ रहा है कि आपका क्या मतलब है, लेकिन योजना इस समय R7RS पर है और R6RS पर थी। लेकिन रैकेट अभी भी R6RS फीचर सेट से बाहर है।
सिनच्यूले

36

इसमें अपरिवर्तनीय सूचियाँ शामिल हैं, जैसा कि ऊपर बताया गया है। इसमें एक संरचना प्रणाली भी शामिल है जो R6RS रिकॉर्ड सिस्टम की तुलना में थोड़ा साफ है। इसमें ऑब्जेक्ट ओरिएंटेड क्लास और ऑब्जेक्ट सिस्टम है। इसमें अनुबंध द्वारा डिजाइन के लिए मूल समर्थन है। इसमें एक यूनिट सिस्टम ML मॉड्यूल सिस्टम की याद दिलाता है, साथ ही R6RS मॉड्यूल सिस्टम की तरह एक मॉड्यूल सिस्टम है। मुझे यकीन है कि मैंने जितनी चीजों का उल्लेख किया है, मैं भूल गया हूं।

मुझे यकीन नहीं है कि नामकरण एक विपणन नौटंकी के अलावा कुछ के रूप में उपयोगी था, लेकिन रैकेट निश्चित रूप से योजना की एक अलग बोली है।


24
मुझे लगता है कि नाम बदलकर इसलिए रखा गया क्योंकि वे अमानवीय परिवर्धन के एक समूह के साथ योजना की कुछ बोली नहीं बनना चाहते थे - वे एक योजना आधारित भाषा चाहते थे जिसमें एक गुच्छा अधिक सामान मानक हो। PLT स्कीम को "सिर्फ" के रूप में वर्गीकृत करना रूबी को मिरा की एक बोली के रूप में वर्गीकृत करने जैसा है - यह गलत नहीं है, लेकिन यह भाषा की ताकत को कम करती है।
चक

5
मुझे लगता है कि एक अलग नाम का उपयोग करना एक बुद्धिमान निर्णय है: विभिन्न भाषाओं के लिए एक ही नाम का उपयोग करना जिनके पास एक आम उत्पत्ति है आईएमओ भ्रमित है। मैं भले ही भाषा को एक उपसमुच्चय के रूप में सम्‍मिलित करता हूँ, लेकिन नाम को बदल देता हूँ, लेकिन इसमें बहुत कुछ जोड़ होते हैं जो कि एक बहुत ही अलग प्रोग्रामिंग शैली को प्रोत्साहित करेगा।
जियोर्जियो


18

योजना प्रोग्रामिंग भाषा पर भाषा विनिर्देश R5RS कई योजना कार्यान्वयनकर्ताओं के बीच आम सहमति पर आधारित है। इसका मतलब यह है कि भाषा बहुत स्थिर है। इसका तात्पर्य यह भी है कि कई उपयोगी सुविधाएँ R5RS मानक का हिस्सा नहीं हैं।

रैकेट ने R5RS पर निर्माण किया है और इसे बहुत बढ़ाया है। कुछ एक्सटेंशन को मैक्रोज़ के रूप में परिभाषित किया जाता है, लेकिन कुछ सुविधाओं को रनटाइम सिस्टम के समर्थन की आवश्यकता होती है।

अकेले मैक्रों द्वारा लागू नहीं की गई रैकेट में विशेषताएं:

  • सीमांकित निरंतरता (कॉल / सीसी से अधिक सामान्य)
  • निरंतरता के निशान
  • सूत्र
  • स्थानों
  • ffi

मॉड्यूल और मैक्रो सिस्टम RnRS विनिर्देश की तुलना में बहुत अधिक सामान्य हैं। #langपाठक / भाषा विनिर्देश के साथ मिलकर कस्टम भाषाओं (कस्टम सिंटैक्स के साथ) को परिभाषित करना और सामान्य रैकेट कार्यक्रमों के साथ उनका उपयोग करना संभव बनाता है।

कुछ मामलों में रैकेट ने निर्माण किया है जिसका व्यवहार R5RS से विचलित होता है। सबसे स्पष्ट एक consअचल जोड़ी का mconsनिर्माण कर रहा है ( एक परस्पर जोड़ी का निर्माण करता है)। एक अपरिवर्तनीय जोड़े होने का एक फायदा यह है कि lengthअब O (1) परिचालित समय में चलता है।


2
... लेकिन यह O (1) सूची को असंभव बनाता है।
विल नेस

16

रैकेट में R6RS योजना में शामिल बहुत सारे अच्छे भाषा निर्माण शामिल नहीं हैं, जैसे "मैच"


3
"मैच" एक अच्छी विशेषता क्यों होगी? कम से कम, जब आप एक राय व्यक्त करते हैं, तो आपको इसकी संक्षिप्त जानकारी देनी चाहिए, ताकि रैकेट से अच्छी तरह परिचित न होने वाले लोग समझ सकें कि "मैच" सैद्धांतिक रूप से क्यों फायदेमंद है।
23

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

1
matchयह बहुत अच्छा है, लेकिन सौभाग्य से यह सिर्फ एक मैक्रो है इसलिए इसे आसानी से लिस्प्स में जोड़ा जा सकता है जो इसके पास नहीं है। आम लिस्प के माध्यम से सूचियों पर प्रकाश पैटर्न मिलान कर सकते हैं destructuring-bind। इसके destructuring-caseआधार पर मैक्रो लिखना सरल है , और कई लोगों के पास है। योजना के लिए पोर्टेबल matchपुस्तकालय हैं। क्लोजर है core.match
लस्सी

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

12

एक बड़े उदाहरण के लिए, रैकेट सूचियां डिफ़ॉल्ट रूप से अपरिवर्तनीय हैं, जबकि स्कीम परस्पर हैं। रैकेट में कई मानक पुस्तकालय (जैसे वेब सर्वर) भी शामिल हैं जो अन्य योजनाएं नहीं करती हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.