मैं एमएल वंशावली की अभिव्यक्ति आधारित भाषा पर काम कर रहा हूं, इसलिए इसे स्वाभाविक रूप से प्रकार की आवश्यकता है> :)
अब, मैं ईओपीएल (फ्रीडमैन और वैंड) में एक सरल कार्यान्वयन के आधार पर, प्रकारों की स्थापना की समस्या के लिए एक बाधा-आधारित समाधान का विस्तार करने की कोशिश कर रहा हूं, लेकिन वे एलेग्रेबिक डेटाटाइप्स की ओर कदम बढ़ाते हैं।
मेरे पास अब तक जो भी है वह आसानी से काम करता है; एक अभिव्यक्ति है, तो e
है a + b
, e : Int
, a : Int
और b : Int
। अगर e
एक मैच है,
match n with
| 0 -> 1
| n' -> n' * fac(n - 1)`,
मैं ठीक ही है कि अनुमान लगा सकते हैं t(e) = t(the whole match expression)
, t(n) = t(0) = t(n')
, t(match) = t(1) = t(n' * fac(n - 1)
और इतने पर ...
लेकिन जब मैं बीजीय डेटाटाइप्स की बात करता हूं तो मैं बहुत अनिश्चित हूं। मान लें कि कोई फ़ंक्शन फ़िल्टर की तरह है:
let filter pred list =
match list with
| Empty -> Empty
| Cons(e, ls') when pred e -> Cons (e, filter ls')
| Cons(_, ls') -> filter
पॉलीमोर्फिक रहने के लिए सूची प्रकार के लिए, विपक्ष को प्रकार का होना चाहिए a * a list -> a list
। तो, इन बाधाओं स्थापित करने में, मैं स्पष्ट रूप से मेरे बीजीय कंस्ट्रक्टर्स के इन प्रकार को देखने के लिए की जरूरत है - समस्या मैं अब बीजीय कंस्ट्रक्टर्स के कई का उपयोग करता है के 'संदर्भ संवेदनशीलता' है - मैं अपने बाधा समीकरणों में व्यक्त करते हैं कि a
में प्रत्येक मामले को एक ही होना चाहिए?
मुझे इसका एक सामान्य समाधान खोजने में परेशानी हो रही है, और मैं इस पर ज्यादा साहित्य नहीं खोज पा रहा हूं। जब भी मुझे कुछ ऐसा ही लगता है - अभिव्यक्ति आधारित भाषा, बाधा-आधारित प्रकार के निष्कर्ष के साथ - वे बीजीय डेटाटाइप्स और बहुरूपता की कमी को रोकते हैं।
किसी भी इनपुट बहुत सराहना की है!