2010-08-14 20 views
21

कोई भी आम लिस्प मैक्रोज़ पर स्कीम मैक्रोज़ क्यों पसंद करेगा (और मैं वास्तव में भी जानना चाहता हूं, मैं ट्रोल होने की कोशिश नहीं कर रहा हूं)?योजना मैक्रोज़ के क्या फायदे हैं?

एक लिस्प newb के रूप में मेरा अनुभव है कि कॉमन लिस्प शैली मैक्रो बहुत आसान योजना के मैक्रो से जानने के लिए कर रहे हैं। मैंने अभी तक योजना के मैक्रोज़ के लिए कोई लाभ नहीं देखा है, लेकिन निश्चित रूप से इसका मतलब यह नहीं है कि वे मौजूद नहीं हैं।

मुझे पता है कि योजना मैक्रो "स्वास्थ्यकारी" हैं, लेकिन मैं अब भी आश्वस्त इस अतिरिक्त जटिलता के लायक है नहीं कर रहा हूँ। दूसरी तरफ, स्पष्ट रूप से लोग हैं जो इस बात से सहमत हैं कि यह आवश्यक है, अन्यथा आम लिस्प में योजना मैक्रोज़ के कार्यान्वयन नहीं होंगे।

लंबी कहानी कम करने के लिए, क्या कोई मुझे योजना के मैक्रोज़ की रक्षा कर सकता है?

उत्तर

17

योजना मैक्रोज़ दो अनिवार्य रूप से ऑर्थोगोनल, अवधारणाओं को प्रस्तुत करते हैं: स्वच्छता और पैटर्न मिलान। सामान्य लिस्प की तरह lisp2 में स्वच्छता कम महत्वपूर्ण है। पैटर्न मिलान करने वाली भाषा में कई आम मैक्रो मुहावरे हैं, लेकिन समस्या यह है कि यह अनिवार्य रूप से योजना से एक अलग भाषा है। शायद इस योजना के मैक्रो के लिए सबसे अच्छा परिचय, उन्हें पीछे तर्क के कुछ के साथ श्रीराम कृष्णमूर्ति के PLAI अध्याय 36 और 37.

है मुझे लगता है कारण लोग लिखते हैं कि आम तुतलाना में योजना शैली मैक्रो प्रणालियों की तुलना में पैटर्न मिलान के लिए और अधिक है स्वच्छता के लिए।

7

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

सामान्य लिस्प में लोगों के लिए योजना मैक्रोज़ के लिए यह सबसे अच्छा तर्क है: यदि आप योजना के शीर्ष पर एक जटिल भाषा बना रहे हैं, तो आप मानक मैक्रो सिस्टम के साथ चिपकने पर सूक्ष्म मैक्रो बग पेश करने की संभावना कम हैं।

व्यक्तिगत रूप से, मैं मैक्रो का उपयोग कर बड़ा भाषाओं का निर्माण नहीं है, इसलिए मैं कॉमन लिस्प मैक्रो पसंद करते हैं। मुझे छोटी नौकरियों के लिए उन्हें बहुत आसान लगता है और वेरिएबल कैप्चर इत्यादि से बचने के लिए एक छोटे पैमाने पर एक बड़ा सौदा नहीं है।

+4

"स्कीम मैक्रोज़" सीएल मैक्रोज़ की तुलना में कम शक्तिशाली नहीं हैं - यह केवल पैटर्न-मिलान-प्रतिबंधित 'वाक्यविन्यास-नियम' है जो कम शक्तिशाली हैं। मनमानी 'वाक्यविन्यास-केस' शैली मैक्रोज़ सीएल मैक्रोज़ के रूप में शक्तिशाली हैं, और वास्तव में अधिक शक्तिशाली है क्योंकि सीएल मैक्रोज़ लगभग व्याख्यात्मक जानकारी को अनदेखा करते हैं। –

+0

@ एली बरज़ील: कई सीएल कार्यान्वयन सीएलटीएल 2 में वर्णित 'वातावरण' के लिए इंटरफ़ेस का उपयोग करके व्याख्यात्मक जानकारी प्रदान करते हैं। –

+1

ध्यान दें कि मैंने कहा * लगभग औपचारिक *। मुझे पूरा यकीन है कि ओलेग ने दिखाया है कि यहां तक ​​कि 'वाक्यविन्यास-नियम' भी ट्यूरिंग-पूर्ण है। मेरी राय में, 'सिंटैक्स-नियम' और 'सिंटैक्स-केस' पर प्रतिबंध, भले ही 'सिंटैक्स-केस' के चारों ओर सरल तरीके हैं, जटिल मैक्रोज़ में सूक्ष्म बग को रोकने के लिए हैं (और पाठ्यक्रम के प्रकाशित करने योग्य कागजात बनाने के लिए))। लेकिन मुझे यह भी लगता है कि उन प्रतिबंधों ने सीएल मैक्रो सिस्टम की तुलना में सरल मैक्रोज़ को बहुत कम सुविधाजनक बना दिया है। –

4

योजना मैक्रोज़ referential transparency को संरक्षित करता है।

"छल संदर्भ मैनुअल" 6.10.2.2 स्वच्छता का हवाला देते हुए:

वाक्य रचना-नियम मैक्रो (..) निर्देशात्मक पारदर्शिता बनाए रखने के। जब आप मैक्रो परिभाषा पढ़ते हैं, तो उस मैक्रो में किसी भी नि: शुल्क बाइंडिंग को मैक्रो परिभाषा के सापेक्ष हल किया जाता है; और जब आप मैक्रो तत्कालता को पढ़ते हैं, तो अभिव्यक्ति के सापेक्ष को अभिव्यक्ति के सभी स्वतंत्र बाइंडिंग को हल किया जाता है।

यह गुण कभी कभी स्वच्छता के रूप में जाना जाता है, और यह कोड सफाई में सहायता करता है। अपनी मैक्रो परिभाषाओं में, आप मैक्रो विस्तार में बाइंडिंग को अनजाने में पेश करने के बारे में चिंता किए बिना अस्थायी चर प्रस्तुत करने के लिए स्वतंत्र महसूस कर सकते हैं।

स्टैंडर्ड योजना syntax-rules और syntax-case प्रदान करता है।

+0

हालांकि, परिवर्तनीय कैप्चर एक वांछनीय विशेषता हो सकती है। क्या योजना के मैक्रो के साथ ऐसा करने का कोई तरीका है? –

संबंधित मुद्दे