2009-12-03 13 views
6

क्या आपके पास लिस्प में हैश टेबल या डिक्ट्स हो सकती है? मेरा मतलब डेटा संरचना है जो जोड़े (कुंजी, मान) का संग्रह है जहां कुंजी का उपयोग करके मानों को जोड़ा जा सकता है।क्या आपके पास लिस्प में हैश टेबल हो सकती है?

उत्तर

0

लिस्प में इसे आमतौर पर एक संपत्ति सूची कहा जाता है।

+1

नहीं, संपत्ति सूचियां कुछ अलग हैं। सीएलएचएस शब्दावली देखें: http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_p.htm#property_list –

+2

हां और नहीं - कोई संपत्ति सूची हैश तालिका नहीं है, लेकिन यह एक शब्दकोश-जैसी प्रदान करती है इंटरफ़ेस (और उसका प्रश्न निर्दिष्ट करता है "... डेटा संरचना जो जोड़ों (कुंजी, मान) का संग्रह है जहां चाबियों का उपयोग करके मानों को जोड़ा जा सकता है।" एक संपत्ति सूची निश्चित रूप से बिल्कुल प्रदान करती है, हालांकि बिना किसी श्वास के (या उसके पास कुछ भी प्रदर्शन...) –

7
बेशक

- कॉमन लिस्प hash tables है।

(setq a (make-hash-table)) 
(setf (gethash 'color a) 'brown) 
(setf (gethash 'name a) 'fred) 
(gethash 'color a) => brown 
(gethash 'name a) => fred 
(gethash 'pointy a) => nil 

संपत्ति सूचियों प्रदर्शन-परक उद्देश्य की बहुत छोटी उदाहरण के लिए अच्छे हैं, लेकिन किसी भी असली के लिए की जरूरत है उनके प्रदर्शन भी बेहद कम है, तो हैश तालिकाओं का उपयोग।

9

यदि आप आम लिस्प का जिक्र कर रहे हैं, hash tableshash-table नामक एक प्रकार द्वारा प्रदान किया जाता है।

Using these tables समारोह make-hash-table के साथ एक बनाने, gethash साथ मूल्यों को पढ़ने के लिए, उन्हें setf के साथ मिलकर एक place रूप gethash का उपयोग करके की स्थापना, और remhash साथ प्रविष्टियां निकालने शामिल है।

कुंजी मान से हैश कोड से मैपिंग फ़ंक्शन sxhash फ़ंक्शन के साथ हैश तालिकाओं के बाहर उपलब्ध है।

11

कॉमन लिस्प कि (कुंजी मान भंडारण) करने के लिए कम से कम चार अलग अलग तरीकों से किया है:

  • संपत्ति सूचियां (: foo 1: बार 2)
  • assoc सूचियां ((: foo। 1) (: बार 2))
  • हैश टेबल
  • क्लोज ऑब्जेक्ट्स (स्लॉट-वैल्यू फू 'बार) प्राप्त करने के लिए और (सेटफ (स्लॉट-वैल्यू फू' बार) 42) सेट करने के लिए। स्लॉट नाम को एक चर में संग्रहीत किया जा सकता है: (चलो ((नाम 'बार)) (स्लॉट-मान foo नाम))।

सरल उपयोग assoc सूचियों या संपत्ति सूचियों के लिए ठीक है। बड़ी संख्या में तत्वों के साथ उन्हें 'धीमा' मिलता है। हैश टेबल 'तेज़' हैं लेकिन उनके अपने ट्रेडऑफ हैं। CLOS ऑब्जेक्ट्स का उपयोग कई अन्य ऑब्जेक्ट सिस्टमों में किया जाता है। चाबियां एक सीएलओएस कक्षा में परिभाषित स्लॉट-नाम हैं। हालांकि प्रोग्राम वेरिएंट करना संभव है जो एक्सेस पर स्लॉट जोड़ और निकाल सकते हैं।

1

एक प्रणाली हैश फंक्शन (आमतौर पर SXHASH) का उपयोग करें कि वहाँ में निर्मित है hash tables, और आप (अलग समानता चेकर्स के एक जोड़े EQ, EQL, बराबर या EQUALP हो सकता है जहाँ आप क्या करने पर विचार के आधार पर "एक ही" होने के लिए कुंजी)।

यदि अंतर्निहित हैश टेबल पर्याप्त नहीं हैं, तो a generic hash table लाइब्रेरी भी है। यह "हैश जेनरेटर"/"कुंजी तुलनित्र" की किसी भी जोड़ी को स्वीकार करेगा और आपको एक हैश टेबल बनाता है। हालांकि, यह अच्छी तरह से काम करने के लिए एक अच्छा हैश फ़ंक्शन रखने पर निर्भर करता है और यह लिखना जरूरी नहीं है।

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

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