2013-05-27 14 views
5

मैंने अभी row polymorphism पढ़ा है और इसका उपयोग एक्स्टेंसिबल रिकॉर्ड्स और पॉलिमॉर्फिक वेरिएंट के लिए कैसे किया जा सकता है।ओकैमल पॉलिमॉर्फिक रूपों के लिए उप-प्रकार का उपयोग क्यों करता है?

हालांकि, ओकैम पॉलिमॉर्फिक रूपों के लिए उप प्रकार का उपयोग करता है। क्यूं कर? क्या यह पंक्ति बहुरूपता से अधिक शक्तिशाली है?

उत्तर

4

सोचने के लिए के बारे में यह है कि subtyping दोनों सार्वभौमिक और अस्तित्व बहुरूपता का एक कमजोर रूप प्रदान करता है गेब्रियल के जवाब एक ही रास्ता है की मदद के लिए। जब पैरामीट्रिक बहुरूपता के दोनों दिशाएं उपलब्ध हैं, तो सबटाइपिंग की अभिव्यक्ति अधिकतर कम हो जाती है (विशेष रूप से जब कोई गहराई उप-प्रकार नहीं होती है)। लेकिन ओकंपल में यह मामला नहीं है।

ओकैमल सार्वभौमिक पहलू को वास्तविक सार्वभौमिक बहुरूपता द्वारा प्रतिस्थापित करता है, लेकिन यह आपको अस्तित्वत्मक मात्रा का एक रूप देने के लिए उप प्रकार रखता है जो अन्यथा नहीं है। उदाहरण के लिए जरूरी है विषम संग्रह, जैसे <a: int> list जिसमें आप मनमानी वस्तुओं को स्टोर करने में सक्षम होना चाहते हैं, कम से कम a सही प्रकार की विधि है।

मैं भी आगे जाकर कहते हैं कि, जबकि यह आम तौर पर OCaml दुनिया में subtyping के रूप में समझाया गया है, तो आप वास्तव में बंद पंक्तियों व्याख्या की जा सकती रूप existentially एक (अज्ञात) पूंछ से अधिक मात्रा निर्धारित होगा। :> के माध्यम से जबरदस्त अस्तित्व में परिचय होगा, इस प्रकार परमेट्रिक बहुरूपता की दुनिया के प्रति अधिक वफादार रहना होगा जिस पर पंक्तियां बनाई गई हैं। (बेशक, इस व्याख्या के तहत, # अंतर्निहित अस्तित्वहीन उन्मूलन करेगा।) अगर मैं ओकैम-जैसी प्रणाली को स्क्रैच से डिजाइन करना चाहता था, तो शायद मैं इसे इस तरह मॉडल करने की कोशिश करता हूं।

+0

धन्यवाद! पंक्ति परिवर्तनीय पर सार्वभौमिक/अस्तित्वत्मक मात्रा के रूप में सिक्योरिंग दबावों के बारे में कभी सोचा नहीं ... –

+1

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

8

ओकैम पंक्ति polymoprhism और polymorphic रूपों (और वस्तुओं, उस मामले के लिए) के लिए subtyping का उपयोग करता है। पंक्ति polymorphism "खुले" ऑब्जेक्ट प्रकार < m1 : t1; m2 : t2; .. > (.. शब्द का शाब्दिक हिस्सा होने के लिए), या "खुला" संस्करण प्रकार [> `K1 of t1 | `K2 of t2 ] के लिए शामिल है। उप-प्रकार का उपयोग बंद, गैर-पॉलीमोर्फिक प्रकार <m1:t1; m2:t2> :> <m1:t1> या [ `K1 of t1 ] :> [ `K1 of t1 | `K2 of t2 ] के बीच कास्ट करने में सक्षम होने के लिए किया जाता है।

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

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