शब्द पुनर्लेखन और पैटर्न मिलान के बीच अंतर क्या है?


25

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

जवाबों:


26

इन दोनों अवधारणाओं को देखने का एक तरीका यह है कि पैटर्न मिलान, कंस्ट्रक्टरों और विनाशकारी शब्दों के संयोजन के लिए प्रोग्रामिंग भाषाओं की एक विशेषता है (जबकि एक ही समय में और स्थानीय स्तर पर नामकरण के टुकड़ों का चयन करना) सुरक्षित, कॉम्पैक्ट और कुशलता से। पैटर्न मिलान पर शोध आम तौर पर कार्यान्वयन दक्षता पर केंद्रित होता है, उदाहरण के लिए कि मिलान तंत्र की तुलना करने की संख्या को कैसे कम करना है।

इसके विपरीत, शब्द पुनर्लेखन संगणना का एक सामान्य मॉडल है , जो वाक्यों के उपसंहारों की जगह की एक विस्तृत श्रृंखला (संभावित गैर-नियतात्मक) के तरीकों की जांच करता है (अधिक सटीक रूप से चर के कुछ सेट पर शब्द-बीजगणित का एक तत्व)। शब्द पुनर्लेखन प्रणाली पर शोध आम तौर पर पुनर्लेखन प्रणालियों के अमूर्त गुणों जैसे संगम, नियतत्ववाद और समाप्ति के बारे में होता है, और विशेष रूप से इस तरह के गुण कैसे होते हैं या पुनर्लेखन प्रणालियों पर बीजीय संचालन द्वारा संरक्षित नहीं होते हैं, अर्थात ये गुण क्या हैं।

स्पष्ट रूप से दोनों के बीच वैचारिक ओवरलैप हैं, और भेद तकनीकी की बजाय एक हद तक पारंपरिक है। एक तकनीकी अंतर यह है कि अवधि को फिर से लिखने (यानी एक नियम मनमाना संदर्भों के तहत होता है लाती पुनर्लेखन सी [ एल σ ] सी [ आर σ ] मनमाना संदर्भों के लिए सी [ ] और प्रतिस्थापन σ(एल,आर)सी[एलσ]सी[आरσ]सी[]σ), जबकि हास्केल, ओकेमेल या स्काला जैसी आधुनिक भाषाओं में पैटर्न एक शब्द के शीर्ष पर 'पुनर्लेखन के लिए ही प्रदान करता है। यह प्रतिबंध, मुझे लगता है, जे के पैटर्न कैलकुलस में लगाया गया है। मुझे इस प्रतिबंध से क्या मतलब है मुझे समझाएं। OCaml, Haskell, Scala sense में पैटर्न मिलान के साथ, आप ऐसा कुछ नहीं कह सकते

match M with
   | C[ x :: _ ]  -> printf "%i ...\n" x
   | C[ [] ] -> printf "[]"

C[.]यहाँ क्या है ? यह एक ऐसा चर माना जाता है, जो एक-होली संदर्भों से अधिक होता है। लेकिन OCaml, Haskell या Scala जैसी भाषाएं प्रोग्रामर वैरिएबल नहीं देतीं जो मनमाने तरीके से (एक-होली) संदर्भों से अधिक होती हैं, केवल वे वैरिएबल होते हैं जो मानों पर रेंज करते हैं। दूसरे शब्दों में, इस तरह की भाषाओं में आप एक शब्द में एक मनमाने स्थान पर मैच नहीं कर सकते। आपको हमेशा पैटर्न के मूल से उन हिस्सों तक का पथ निर्दिष्ट करना होगा, जिसमें आप रुचि रखते हैं। मुझे लगता है कि इस प्रतिबंध को लागू करने के लिए महत्वपूर्ण कारण यह है कि अन्यथा पैटर्न मिलान गैर-नियतात्मक होगा, क्योंकि एक शब्द पैटर्न में मेल खा सकता है। एक से अधिक तरीके से। उदाहरण के लिए यह शब्द दो तरीकों (true, [9,7,4], "hello", 7)से पैटर्न से मेल खाता C[7]है, C[.] इस तरह के संदर्भों पर निर्भर करता है।


11

मुझे नहीं लगता कि उन्हें पर्यायवाची कहना सही है; अनुसंधान और कार्यान्वयन के संदर्भ में कुछ ओवरलैप है। मैं जे के काम से बिलकुल भी परिचित नहीं हूँ, और मैं केवल शब्द पुनर्लेखन प्रणाली से ही परिचित हूँ, इसलिए मुझे भी कुछ याद आ रहा है।

सामान्य समस्या से संबंधित पैटर्न निम्नलिखित समस्या से संबंधित है: आपके पास कुछ संरचना (एक पेड़ या एक सूची या एक मल्टीसेट) है और आप यह जांचना चाहते हैं कि क्या संरचना एक पैटर्न से मेल खाती है (या कई पैटर्न में से एक)। यह प्रश्न निश्चित रूप से शब्द पुनर्लेखन के लिए प्रासंगिक है, क्योंकि शब्द पुनर्लेखन में यह तथ्य है कि एक शब्द एक पैटर्न से मेल खाता है, इसका मतलब है कि यह शब्द एक अलग शब्द में फिर से लिखा जा सकता है, लेकिन यह शब्द पुनर्लेखन का पर्याय नहीं है। (पुनर्लेखन के रूप में पैटर्न मिलान का एक सूत्रीकरण हो सकता है: "एक शब्द को देखते हुए, क्या आप इसे मैच पैटर्न से दोबारा लिख ​​सकते हैं?" लेकिन मैंने इसे कभी नहीं देखा है।)

फ़ंक्शनल प्रोग्रामिंग लैंग्वेज में पैटर्न से मेल खाने के संदर्भ में तार्किक व्याख्या है ( उदाहरण के लिए, कृष्णस्वामी का "पैटर्न मिलान पर ध्यान केंद्रित करना" )। दूसरी ओर, शब्द पुनर्लेखन प्रणाली, अक्सर मॉडुलो को कुछ समान गुणों से मेल खाती है, जो अधिकांश कार्यात्मक प्रोग्रामिंग भाषाओं में मौजूद नहीं है (आप एमएल या हास्केल में एक मल्टीसेट के खिलाफ मेल नहीं कर सकते हैं)। हालाँकि, कोई मौलिक कारण नहीं है कि कार्यात्मक भाषाओं में मौडुलो समान गुणधर्मों का मिलान नहीं होना चाहिए।


1
आपके उत्तर के लिए धन्यवाद। मैं मानता हूं कि सामान्य रूप से मेल खाने वाला पैटर्न शब्द पुनर्लेखन का पर्याय नहीं है, बल्कि यह अधिक आधारभूत है। लेकिन अगर कोई कहता है कि कम्प्यूटेशनल पावर वाली प्रणाली पैटर्न मिलान पर आधारित है, तो मैं कम्प्यूटेशनल पावर के साथ एक शब्द पुनर्लेखन प्रणाली के लिए अंतर नहीं देख सकता। क्या आप "एक तार्किक व्याख्या" और "कुछ समान गुणों" के बीच के अंतर को आगे बढ़ा सकते हैं?
जैकब

"मैं कम्प्यूटेशनल पावर के साथ एक शब्द पुनर्लेखन प्रणाली के लिए अंतर नहीं देख सकता" - मुझे यकीन नहीं है कि इसका क्या मतलब है। जैसा कि मार्टिन कहते हैं, शब्द पुनर्लेखन कम्प्यूटेशन का एक सामान्य मॉडल है, और पैटर्न मिलान एक विशेषता है, न कि गणना का मॉडल।
रॉब सिमंस

क्या आप "एक तार्किक व्याख्या" और "कुछ समान गुणों" के बीच के अंतर को आगे बढ़ा सकते हैं? - उथले अंतर का कोई प्रकार नहीं है - वे सिर्फ अलग-अलग गुण, सेब और संतरे हैं। मुझे लगता है कि इन दोनों के बीच कोई वास्तविक संबंध एक बहुत गहरा शोध प्रश्न हो सकता है! गहन अनुमान के साथ पुं - देखें alessio.guglielmi.name/res/cos - शायद इरादा है।
रोब सिमंस

1

(मैं इसे टिप्पणी के रूप में नहीं लिखूंगा, लेकिन वर्तमान में मैं ऐसा नहीं कर सकता।)

सही है अगर मैं गलत हूं, लेकिन जहां तक ​​मैं समझता हूं, पैटर्न मिलान और शब्द पुनर्लेखन के बीच एक और अंतर, इसके अलावा मार्टिन बर्जर ने अपने उत्कृष्ट उत्तर में क्या कहा , क्या पैटर्न मिलान नियम एक निश्चित क्रम के साथ आते हैं (जैसे कार्यान्वयन में) हास्केल का), जबकि शब्द पुनर्लेखन नियमों के साथ ऐसा होना जरूरी नहीं है। यह सुविधा, जैसा कि एक की अपेक्षा होगी, नियमों के व्यवहार (विशेष रूप से, समाप्ति) पर विचार करते समय बहुत अंतर कर सकती है ( उदाहरण के लिए, "हास्केल, संस्करण 98 के लिए एक कोमल परिचय" देखें) , उदाहरण के लिए, या केवल भाज्य उदाहरण पर "आप एक हास्केल सीखें" )।

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

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