मुझे ऐसी कोई चीज़ कभी नहीं मिली है, और मेरे पास अभी और अधिक विस्तृत रूप है।
डिफ़ॉल्ट रूप से इसे लागू करने के लिए एक ध्वनि कम्प्यूटेशनल कारण नहीं है - किसी को पैटर्न मिलान से पहले इनपुट के सभी संयोजनों को अनिवार्य रूप से उत्पन्न करना होगा, या आपको मैच क्लॉज के पूर्ण क्रॉस-उत्पाद मूल्य उत्पन्न करना होगा।
मुझे संदेह है कि इसे लागू करने का सामान्य तरीका केवल दोनों पैटर्न (बाइनरी मामले में) लिखना होगा, यानी C or $X
और $X or C
दोनों के लिए पैटर्न हैं।
डेटा के अंतर्निहित संगठन (आमतौर पर यह टुपल्स) के आधार पर, इस पैटर्न मिलान में ट्यूपल तत्वों के क्रम को पुनर्व्यवस्थित करना शामिल होगा, जो अजीब होगा (विशेष रूप से दृढ़ता से टाइप किए गए पर्यावरण में!)। यदि इसकी बजाय सूचियां हैं, तो आप भी कमजोर जमीन पर हैं।
संयोग से, मुझे लगता है कि आपरेशन आप मौलिक चाहते सेट पर संबंध तोड़ना संघ पैटर्न है जैसे:
foo (Or ({C} disjointUnion {X})) = ...
केवल प्रोग्रामिंग वातावरण मैंने देखा है कि किसी भी विस्तार से सेट के साथ संबंधित होगा इसाबेल/HOL , और मुझे अभी भी यकीन नहीं है कि आप उनके ऊपर पैटर्न मैचों का निर्माण कर सकते हैं।
संपादित करें: यह इसाबेल के function
कार्यक्षमता (बल्कि fun
की तुलना में) की तरह दिखता है आप जटिल गैर निर्माता पैटर्न को परिभाषित करने देगा, तो सिवाय आप को साबित करना है कि वे लगातार उपयोग किया जाता है है, और आप अब और कोड जनरेटर का उपयोग नहीं कर सकते हैं।
संपादित करें 2:
मेरे शब्द, रूप A | B | C | D
के थे, जबकि प्रश्नों रूप B | C | $X
, जहां $X
मिलान करने के लिए अनुमति दी गई थी के थे: जिस तरह से मैं n
विनिमेय, साहचर्य और सकर्मक ऑपरेटरों से अधिक समान कार्यक्षमता लागू इस था शून्य या अधिक चीजें। मैंने लेक्सोग्राफिक ऑर्डरिंग का उपयोग करके इन्हें पूर्व-क्रमबद्ध किया, ताकि चर हमेशा अंतिम स्थिति में हुई।
सबसे पहले, आप सभी जोड़ों के मैचों का निर्माण करते हैं, अब के लिए चर को अनदेखा करते हैं, और आपके नियमों के अनुसार मेल खाने वाले रिकॉर्डिंग करते हैं।
{ (B,B), (C,C) }
आप एक द्विपक्षीय ग्राफ के रूप में इस का इलाज है, तो आप अनिवार्य रूप से एक perfect marriage समस्या कर रहे हैं। इन्हें खोजने के लिए तेज़ एल्गोरिदम मौजूद हैं।
आप एक पाते हैं मान लिया जाये, तो आप सब कुछ है कि अपने संबंध की बाएं हाथ की ओर पर प्रकट नहीं होता इकट्ठा (इस उदाहरण, A
और D
में), और आप उन चर $X
में सामान, और अपने मैच है पूर्ण। जाहिर है आप यहां किसी भी स्तर पर असफल हो सकते हैं, लेकिन अगर ऐसा होता है तो आरएचएस पर कोई परिवर्तनीय मुक्त नहीं होता है, या यदि एलएचएस पर एक कन्स्ट्रक्टर मौजूद है जो किसी भी चीज़ से मेल नहीं खाता है (आपको एक परिपूर्ण मैच खोजने से रोकता है)।
क्षमा करें अगर यह थोड़ा सा गड़बड़ है। यह थोड़ी देर हो गया है क्योंकि मैंने यह कोड लिखा था, लेकिन मुझे उम्मीद है कि यह आपकी मदद करता है, यहां तक कि थोड़ा सा!
रिकॉर्ड के लिए, यह सभी मामलों में एक अच्छा दृष्टिकोण नहीं हो सकता है। मेरे पास उपनगरों पर 'मैच' की बहुत जटिल धारणाएं थीं (यानी, साधारण समानता नहीं), और इसलिए बिल्डिंग सेट या कुछ भी काम नहीं करता। शायद यह आपके मामले में काम करेगा हालांकि आप सीधे विवाद संघों की गणना कर सकते हैं।
मुझे यकीन है कि मैं Prolog पैटर्न मिलान बनाम एमएल पैटर्न मिलान अपने सम्मिश्रण के साथ सहमत नहीं हूँ। एमएल पैटर्न मिलान पूरी तरह से वाक्य रचनात्मक है, और प्रोलॉग में मुझे विश्वास नहीं है कि यह मामला है। – Gian
मैं यह नहीं कह रहा हूं कि वे एक ही बात हैं, केवल वे सख्त क्रम में तत्वों की तुलना में आम हैं। – rwallace
मैं समर्पित प्रमेय साबित सॉफ़्टवेयर मानता हूं जैसे ओटर पहले से ही लॉजिकल फॉर्मूला को सामान्य रूप में रखकर और खंडों को डेटा संरचनाओं के रूप में पेश करके करता है, जो निर्माण और सत्यापन दोनों के लिए ओ (एन लॉग एन) समय खर्च करता है। असल में, मुझे लगता है कि उन्होंने एसोसिएटिविटी और कम्यूटिटीविटी जैसे गुणों के लिए संचालन के लिए प्रीप्रोग्राम किए गए ऑप्टिमाइज़ेशन हैं। –