मैंने अतीत में एसएमएल में थोड़ा सा काम किया है, लेकिन अब मैं और अधिक दिलचस्प भागों में जाना शुरू कर रहा हूं।एसएमएल: संरचना के कार्यान्वयन को छिपाने के लिए abstype का उपयोग करने और हस्ताक्षर का उपयोग करने के बीच क्या अंतर है?
abstype...with...end
निर्माण का उपयोग करके, मैं चीजें बना सकता हूं लेकिन उनके कार्यान्वयन के विवरण छुपा रहता हूं। मैं उस चीज़ का हस्ताक्षर भी बना सकता हूं जिसे मैं बनाना चाहता हूं, और उस हस्ताक्षर का पालन करने वाली संरचना बनाने के लिए :>
ऑपरेटर का उपयोग करें जो कार्यान्वयन विवरण छुपा रहता है।
हस्ताक्षर/संरचनाएं abstypes का एक और सामान्य संस्करण नहीं हैं? मैं abstypes के साथ क्या कर सकता हूँ कि मैं हस्ताक्षर/संरचनाओं के साथ नहीं कर सकता? मैं कभी भी abstype का उपयोग क्यों करना चाहूंगा?
मदद के लिए अग्रिम धन्यवाद!
एक उदाहरण के रूप:
signature SET = sig
type set
val empty: set
val insert: int * set -> set
val member: int * set -> bool
end
structure Set :> SET = struct
type set = int list
val empty = []
fun insert(x, s) = x::s
fun member(x, []) = false
| member(x, h::t) = (x = h) orelse member(x, t)
end
लगता है कम से कम के रूप में शक्तिशाली रूप में
abstype AbsSet = absset of int list with
val empty = absset([])
fun insert(x, absset(s)) = absset(x::s)
fun member(x, absset([])) = false
| member(x, absset(h::t)) = (x = h) orelse member(x, absset(t))
end
लिंक अब तय किया गया है। :) –
एकमात्र चीज जो आप abstype के साथ कर सकते हैं कि आप मॉड्यूल के साथ नहीं कर सकते (कम से कम सादे SML'97 में) स्थानीय रूप से '' let'' के अंदर एक अमूर्त प्रकार को परिभाषित कर रहा है। लेकिन ऐसा कुछ नहीं है जिसे किसी ने कभी जलन की जरूरत महसूस की है ... –