सिद्धांत रूप में, कोई
कोई भाषा एक्सटेंशन जिसके लिए अनुमति देते हैं "comprehensions निर्धारित किया है।"
एक Set
और एक List
के बीच मतभेद हैं:
Set
अव्यवस्थित है, जबकि List
Set
के तत्वों का आदेश दिया है अद्वितीय हैं List
डुप्लिकेट तत्वों को
- ले सकते हैं जब
Set
का प्रकार Ord
का उदाहरण है जबकि List
में कोई प्रकार प्रतिबंध नहीं है।
आप देख सकते हैं कि हर संभव Set
सब संभव List
एस के एक सख्त सबसेट हैं। इसका मतलब है कि हम "सेट समझ" प्राप्त कर सकते हैं, बस एक सूची समझ का उपयोग कर इसे Set
में परिवर्तित कर सकते हैं। आलसी मूल्यांकन अक्सर "सेट पीढ़ी" को अधिकतर परिमित सूची समझ से प्राप्त करने में सक्षम बनाता है। हालांकि, अनंत सूचियों के परिणामस्वरूप समझने की संभावनाएं कुशल "सेट समझ" के परिणामस्वरूप होने की संभावना नहीं है।
उदाहरण:
import Data.Set
set :: Ord a => Set a
set = fromList [x * y | x <- [1..10], y <- [1..10]]
अभ्यास में, हां
set-monad
पैकेज का उपयोग करके आप एक Set
Monad
का एक उदाहरण के रूप में परिभाषित करने और भाषा विस्तार MonadComprehensions
का उपयोग कर सकते हैं कि आप प्राप्त कर सकते हैं एक "सेट समझ "।
उदाहरण:
{-# LANGUAGE MonadComprehensions #-}
import Data.Set.Monad
set1 :: Set (Int,Int)
set1 = do
a <- fromList [1 .. 4]
b <- fromList [1 .. 4]
return (a,b)
-- Look a "set comprehension"
set2 :: Set (Int,Int)
set2 = [ (a,b) | (a,b) <- set1, even a, even b ]
उपयोग जो भी विधि अपनी परियोजना के लिए सर्वाधिक महत्व रखता है। निर्णय लेने से पहले प्रोफ़ाइल दोनों!
स्रोत
2015-08-06 14:17:16
'सेट गणितीय संरचना है जो सूची समझ को प्रेरित करती है' लेकिन डेटा.Set उस संरचना को 'ऑर्ड बाधा' के कारण नहीं है। –