मुझे नहीं लगता कि यह हास्केल में संभव है।
हालांकि, आपके मामले में, पैटर्न प्रभावी रूप से a -> Bool
प्रकार का एक कार्य है। तो पैटर्न को स्वीकार करने के बजाय, a
से Bool
से किसी भी फ़ंक्शन को स्वीकार करें। उदाहरण के लिए a
पर फ़ंक्शन a -> Bool
लागू करने के बराबर उदाहरण है।
अब, यदि आप कुछ और सामान्य करना चाहते हैं, जैसे fun1
के शरीर में पैटर्न से मिलान किए गए प्रतीकों का उपयोग करने में सक्षम होने के नाते, आप इसे किसी फ़ंक्शन के साथ करने में सक्षम नहीं होंगे। हालांकि, मुझे संदेह है कि हास्केल के साथ यह संभव है - इसे किसी भी अर्थ के लिए टाइप सिस्टम में अजीब एक्सटेंशन की आवश्यकता होगी। हास्केल में पैटर्न मिलान बिल्कुल प्रथम श्रेणी का नागरिक नहीं है, इसलिए आप वास्तव में इस तरह के पैटर्न को पार नहीं कर सकते हैं।
यदि आप इस तरह के व्यवहार चाहते हैं, तो Pattern Calculus पुस्तक देखें जहां लेखक हास्केल की तुलना में अधिक सामान्य पैटर्न-मिलान सुविधाओं वाली भाषा विकसित और औपचारिक रूप से तैयार करता है। यह हास्केल के विपरीत पैटर्न को प्रथम श्रेणी के नागरिक बनाता है। मैंने अभी तक इस पुस्तक को वास्तव में समाप्त नहीं किया है, लेकिन मुझे पूरा यकीन है कि इस तरह का कोड वही है जो आप अन्य चीजों के साथ लिखने में सक्षम होंगे।
लेखक ने bondi नामक पैटर्न मिलान के बारे में अपने विचारों के चारों ओर एक भाषा बनाई; शायद यह जांचने लायक भी है, खासकर अगर आप पुस्तक से परेशान नहीं होना चाहते हैं। मुझे नहीं पता कि यह व्यावहारिक उपयोग के लिए तैयार है, लेकिन यह निश्चित रूप से दिलचस्प है।
स्रोत
2012-07-05 01:20:34
मैं बात नहीं करते एफ # है, लेकिन मुझे लगता है कि [सक्रिय पैटर्न] (http: // msdn.microsoft.com/en-us/library/dd233248.aspx) कुछ ऐसा ही कर सकता है। – phg