मैं हाल ही में क्लोजर का उपयोग कर रहा हूं लेकिन मुझे अभी भी समझ में नहीं आता कि मुझे कौन सी कार्यक्षमता मिलती है जो सामान्य लिस्प पाठक मैक्रोज़ प्रदान नहीं करती है। सरल शब्दों में मुझे यह समझा सकते हैं?सामान्य लिस्प रीडर मैक्रोज़ का क्या लाभ है कि क्लोजर में नहीं है?
उत्तर
संक्षेप में, पाठक मैक्रोज़ आपको कुछ सीमित संदर्भ में प्रोग्रामिंग भाषा के वाक्यविन्यास को फिर से परिभाषित करने की क्षमता प्रदान करते हैं।
उदाहरण के लिए, आप नियमित अभिव्यक्ति अक्षर (उदा। #"pattern"
) को पाठक मैक्रोज़ को लागू कर सकते हैं। उनके बिना, आपको re-pattern
पर पारित स्ट्रिंग अक्षर में नियमित अभिव्यक्तियों से ठीक से बचने के लिए मजबूर होना होगा।
Btw, जबकि वहाँ पाठक को संशोधित करने के लिए कोई सार्वजनिक Clojure एपीआई हैं, यह असंभव नहीं है, इन पदों में दिखाया गया है:
एक साधारण उदाहरण। सामान्य लिस्प के पास वैक्टर #() के बजाय [] के लिए एक अलग पाठक वाक्यविन्यास है। लेकिन कस्टम रीडर मैक्रोज़ बनाने की क्षमता के साथ आप एक पाठक मैक्रो कर सकते हैं जो सामान्य लिस्प में एक वेक्टर के लिए [2 3 4 5] traslates।
चूंकि अधिकांश उपयोगकर्ता पाठक मैक्रोज़ के अर्थ से अवगत नहीं होंगे, इसलिए उन्होंने शायद ही कभी उपयोग किया है और भ्रम से बचने के लिए रिच हिकी ने क्लोजर में उपयोगकर्ता परिभाषित पाठक मैक्रोज़ को परिभाषित करने की क्षमता को हटाने का निर्णय लिया है। हालांकि, क्लोजर ने रीडर मैक्रोज़ को पूर्वनिर्धारित किया है - उद्धरण, वेक्टर, रेगेक्स, मानचित्र, आदि
कॉमन लिस्प में पाठक उपयोगकर्ता रीडर मैक्रोज़ के साथ एक्स्टेंसिबल है। पाठकएस-एक्सप्रेशन पढ़ने के लिए ज़िम्मेदार है। एस भाव नंबर, तार, प्रतीक, सूचियों, conses, संरचना, सरणियों, वर्ण, जैसे लिस्प के डेटा प्रकार के लिए एक बाहरी शाब्दिक वाक्य रचना रहे हैं ...
पाठक की वाक्य रचना के लिए ज़िम्मेदार नहीं है प्रोग्रामिंग भाषा लिस्प - बस एस-एक्सप्रेशन के लिए।
इस प्रकार पाठक मैक्रोज़ के लिए उपयोगकर्ता के बिंदु से मुख्य उद्देश्य एस-एक्सप्रेशन के वाक्यविन्यास को विस्तार या परिवर्तित करना है। उदाहरण के लिए उपयोगकर्ता विभिन्न सीएलओएस वर्गों (जैसे यूआरएल, ...), हैश-टेबल, विशेष पहचानकर्ता, नए नंबर प्रकार, ...
कभी-कभी इसका उपयोग अन्य भाषाओं के वाक्यविन्यास को एम्बेड करने के लिए भी किया जाता है/वाक्यविन्यास, जिसमें टोकन बनाने के लिए अलग-अलग नियम हैं: एम्बेडेड एसक्यूएल, एम्बेडेड सी, इंफिक्स एक्सप्रेशन, एंबेडेड कॉल ऑब्जेक्टिव सी, एम्बेडेड नियम भाषाएं, एम्बेडेड एक्सएमएल, एम्बेडेड जेएसओएन और अधिक।
एक और उपयोग उपयोगकर्ता को एस-एक्सप्रेशन पर अतिरिक्त नियंत्रण रखने की अनुमति देना है, पाठक वास्तव में पढ़ता है। उदाहरण के लिए सशर्त सुविधा अभिव्यक्तियां।
इस प्रकार उपयोगकर्ता प्रोग्राम करने योग्य पाठक मैक्रोज़ उपयोगकर्ता को उपर्युक्त वर्णित कार्यक्षमता के संबंध में पाठक को अनुकूलित करने की अनुमति देता है। कोई कल्पना कर सकता है कि यह उन उपयोगकर्ताओं के लिए उपयोगी है, जो डेटा-सिंटैक्स/टोकन स्तर पर भाषा को कस्टमाइज़ करना चाहते हैं, लेकिन यह जटिलता की एक और परत जोड़ता है।