2011-11-14 12 views
21

में सख्त डेटा संरचनाओं के लिए पुस्तकालय सख्त डेटा संरचनाओं को लागू करने वाले कौन से पुस्तकालय मौजूद हैं? विशेष रूप से, मैं सख्त सूचियों और सख्त सेट की तलाश में हूं।हास्केल

अस्वीकरण:

  1. मैं deepseq के बारे में पता कर रहा हूँ। यह बहुत उपयोगी है, लेकिन जब भी आप deepseq (जो एक से अधिक हो सकता है) का उपयोग करते समय पूरी डेटा संरचना को पार करने के ऊपरी हिस्से को जोड़ता है।

  2. मुझे पता है कि एक सख्त कंटेनर की तरह डेटा संरचना सब कुछ इसमें पूरी तरह से मूल्यांकन किया जाएगा सुनिश्चित नहीं हूँ, लेकिन संरचना में कोई सख्त होना चाहिए, जैसे:

    data StrictList a = !a :$ !(StrictList a) | Empty 
    

    (यहाँ, निहित तत्व डब्ल्यूएचएनएफ में हैं, और संभवतः पूरी तरह से मूल्यांकन नहीं किए गए हैं, लेकिन सूची की संरचना है। उदाहरण के लिए, अनंत सूचियां गैर-समाप्ति मान होंगे।)

  3. मुझे हैकेज पर 'सख्त' पैकेज के बारे में पता है, लेकिन इसमें बहुत सीमित है सख्त डेटा संरचनाओं का डी सेट। इसमें न तो सख्त सूचियां और सेट शामिल हैं।

  4. सख्त सूचियों अपने आप आश्चर्यजनक आसान (मैं btw GHC के एक्सटेंशन प्यार प्राप्त करने के लिए functor, traversable और Foldable,।) लगता है लेखन, लेकिन यह अभी भी लगता है जैसे कि यह बेहतर एक अलग पुस्तकालय में किया होगा। और सेट के कुशल कार्यान्वयन मेरे लिए तुच्छ लगते हैं।

+0

आपको सख्त संरचना की आवश्यकता क्यों है? – fuz

+1

@FUZxxl यह सुनिश्चित करना कि बिना किसी देरी के चीजों का मूल्यांकन किया जा सके, अक्सर अंतरिक्ष उपयोग को कम कर सकते हैं और कंप्यूटेशंस को बहुत तेज बना सकते हैं। इसके विपरीत प्रभाव भी हो सकता है, इसलिए आलसी संरचनाएं भी महत्वपूर्ण हैं। कुशल कोड के लिए, आपको दोनों की आवश्यकता है (और जानना है कि कहां उपयोग करना है)। –

+0

@FUZxxl: मैं एक सेट पर राज्य-मोनैड जैसी चीजें कर रहा था जहां मैं सेट से तत्वों को अक्सर सम्मिलित और हटा दूंगा लेकिन कुछ समय के लिए सेट का मूल्यांकन नहीं करता हूं। इसके परिणामस्वरूप एक अंतरिक्ष रिसाव हुआ, जिसे रीढ़-सख्त (धन्यवाद, जॉन एल) डेटा संरचनाओं द्वारा तय किया जा सकता है। – shahn

उत्तर

13

containers पैकेज (GHC के साथ भेज दिया) जल्द ही सख्त सेट और मानचित्र वेरिएंट होगा (मुझे यकीन है कि वे GHC-7.4 के साथ शामिल किया जाएगा नहीं कर रहा हूँ, लेकिन वहाँ कारण आशा है)। तो सख्त सेट और मैप्स का एक कुशल कार्यान्वयन रास्ते पर है। सख्त सूचियां हैं, जैसा कि आप आसान कहते हैं, फिर भी हैकेज पर एक पैकेज उन्हें अच्छा प्रदान करेगा, इसलिए सभी को इसे स्वयं नहीं करना है। आपको और क्या चाहिए?

+0

बहुत अच्छा लगता है।सूची और समूह मुझे बस चाहिए (अभी के लिए)। – shahn

7

आपके दूसरे बिंदु के लिए, मैंने जो शब्द देखा है वह अक्सर रीढ़-सख्त है।

एक रीढ़-सख्त सूची के लिए, आप शायद Data.Seq.Sequence (कंटेनरों से) या Data.Vector (vector से) इस्तेमाल कर सकते हैं। कोई भी एक सूची नहीं है, हालांकि आप जो कर रहे हैं उसके आधार पर (या दोनों) बेहतर होने की संभावना है। अनुक्रम ओ (1) विपक्ष और स्नोक प्रदान करता है, जिसमें संरचना के दोनों छोर तक बहुत तेजी से पहुंच होती है। वेक्टर का प्रदर्शन एक सरणी के समान है। यदि आप Sequence पर अधिक सूची-जैसे इंटरफ़ेस चाहते हैं, तो आप ListLike पैकेज पर विचार कर सकते हैं (वैक्टरों के लिए एक सूची इंटरफ़ेस भी है, लेकिन यह कम उपयोगी है क्योंकि वेक्टर अपने आप पर एक व्यापक व्यापक इंटरफ़ेस प्रदान करता है)। दोनों रीढ़-सख्त हैं।

सख्त सेट के लिए, आप unordered-containers को आजमा सकते हैं, जो एक सख्त नक्शा भी प्रदान करता है।

+0

यह अच्छी सलाह है। – shahn

+1

रीढ़ की हड्डी का सख्त मतलब है, कि तत्वों का मूल्यांकन डब्ल्यूएचएनएफ (जैसे मेरे सख्त सूची उदाहरण में) के रूप में किया जाएगा? तो, क्या आप पहले विस्मयादिबोधक चिह्न को हटा सकते हैं और अभी भी इसे रीढ़-सख्त कहते हैं? – shahn

+1

@ शाहन: रीढ़-सख्त मतलब है कि कंटेनर की संरचना का पूरी तरह से मूल्यांकन किया जाएगा, लेकिन तत्वों का मूल्यांकन नहीं किया जा सकता है। तो हाँ, आप अपने उदाहरण में पहले विस्मयादिबोधक चिह्न को हटा सकते हैं और अभी भी रीढ़-सख्त हो सकते हैं। –