इन दोनों अवधारणाओं को देखने का एक तरीका यह है कि पैटर्न मिलान, कंस्ट्रक्टरों और विनाशकारी शब्दों के संयोजन के लिए प्रोग्रामिंग भाषाओं की एक विशेषता है (जबकि एक ही समय में और स्थानीय स्तर पर नामकरण के टुकड़ों का चयन करना) सुरक्षित, कॉम्पैक्ट और कुशलता से। पैटर्न मिलान पर शोध आम तौर पर कार्यान्वयन दक्षता पर केंद्रित होता है, उदाहरण के लिए कि मिलान तंत्र की तुलना करने की संख्या को कैसे कम करना है।
इसके विपरीत, शब्द पुनर्लेखन संगणना का एक सामान्य मॉडल है , जो वाक्यों के उपसंहारों की जगह की एक विस्तृत श्रृंखला (संभावित गैर-नियतात्मक) के तरीकों की जांच करता है (अधिक सटीक रूप से चर के कुछ सेट पर शब्द-बीजगणित का एक तत्व)। शब्द पुनर्लेखन प्रणाली पर शोध आम तौर पर पुनर्लेखन प्रणालियों के अमूर्त गुणों जैसे संगम, नियतत्ववाद और समाप्ति के बारे में होता है, और विशेष रूप से इस तरह के गुण कैसे होते हैं या पुनर्लेखन प्रणालियों पर बीजीय संचालन द्वारा संरक्षित नहीं होते हैं, अर्थात ये गुण क्या हैं।
स्पष्ट रूप से दोनों के बीच वैचारिक ओवरलैप हैं, और भेद तकनीकी की बजाय एक हद तक पारंपरिक है। एक तकनीकी अंतर यह है कि अवधि को फिर से लिखने (यानी एक नियम मनमाना संदर्भों के तहत होता है लाती पुनर्लेखन सी [ एल σ ] → सी [ आर σ ] मनमाना संदर्भों के लिए सी [ । ] और प्रतिस्थापन σ( एल , आर )सी[ एल σ] → सी[ आर σ]सी[ । ]σ), जबकि हास्केल, ओकेमेल या स्काला जैसी आधुनिक भाषाओं में पैटर्न एक शब्द के शीर्ष पर 'पुनर्लेखन के लिए ही प्रदान करता है। यह प्रतिबंध, मुझे लगता है, जे के पैटर्न कैलकुलस में लगाया गया है। मुझे इस प्रतिबंध से क्या मतलब है मुझे समझाएं। 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[.]
इस तरह के संदर्भों पर निर्भर करता है।