2009-07-20 8 views
6

में एक बड़ा वेक्टर कैसे बना सकता हूं मैं 1042 खाली इंडेक्स के साथ वेक्टर आवंटित कैसे करूं?
क्या इसके लिए भंडारण आलसी आवंटित किया जाएगा? ,मैं क्लोजर

(vec (make-array Object 1024)) 

नोट assoc:
इस

(def a (array-creation-function 1042)) 
(def b (assoc a 1041 42)) 
(b 1041) 
--> 42 
+0

मैं एक सतत क्लोजर वेक्टर बनाने की तलाश में हूं, जावा सरणी नहीं –

उत्तर

14

ऐसा लगता है कि वेक्टर स्पैस नहीं हैं इसलिए जब आप वेक्टर बनाते हैं तो आपको प्रत्येक अनुक्रमणिका के लिए एक मान निर्दिष्ट करना होगा। एक अनुक्रम पर सबसे आसान तरीका कॉल (वीसी) लगता है।

(vec (repeat 1042 nil)) 

ये मान आलसी ढंग से नहीं बनाए जाते हैं।

+0

इस बार दो तर्क दोहराने के लिए क्लोजर के हालिया संस्करण की आवश्यकता है –

+0

इन दिनों (2012) यह सही उत्तर है - आपको स्वयं को सही, आर्थर चिह्नित करना चाहिए। –

+0

मैं उस पर आपका शब्द ले जाऊंगा :) –

4
(apply vector (take 1024 (repeat nil))) 

की तरह ... आप कुछ है जो आलसी नहीं है, लेकिन जो कुछ भूमि के ऊपर से बचा जाता है, आप कर सकते हैं चाहते हैं आलसी

+2

क्या आप वाकई आलसी हैं? हालांकि (1024 (निरसन शून्य) ले लो) निश्चित रूप से आलसी है, मुझे लगता है (वेक्टर लागू करें ...) पूर्ण अनुक्रम के मूल्यांकन को मजबूर करेगा। – mikera

+5

वेक्टर कभी आलसी नहीं होते हैं। – amalloy

5

है एक वेक्टर को बदलता नहीं है, यह एक नया वेक्टर देता है जिसमें मूल्यों में से एक बदल जाता है। वेक्टर अपरिवर्तनीय हैं। आपका कोड पोस्ट के रूप में कभी काम नहीं करेगा।

+0

यह इंगित करने के लिए धन्यवाद कि मैंने assoc –

+2

'मेक-सरणी' द्वारा वापस किए गए सरणी को संग्रहीत करने के लिए प्रश्न संपादित किया है, लेकिन 'vec' में इसे लपेटकर इसे क्लोजर वेक्टर में लपेटता है। –

5

यदि आपका डेटा उस स्पैस है, तो वेक्टर के बजाए खाली मानचित्र का उपयोग करने पर विचार करें .... फिर आपको आलसी आवंटित खाली इंडेक्स की एक असीमित संख्या मिलती है!

(def a {}) 
(def b (assoc a 1041 42)) 
(b 1041) 
--> 42