कोई कारण नहीं है कि आप सीधे लंबे समय तक उपयोग नहीं कर सकते। समस्या, जैसा कि आपने नोट किया है, यह है कि जावा (और इसलिए क्लोजर) लंबे समय तक हस्ताक्षरित है, सकारात्मक संख्याओं के लिए केवल 63 बिट्स को
जावा, डिफ़ॉल्ट रूप से, त्रुटि के बिना अंकगणित अतिप्रवाह की अनुमति देता है। क्लोजर, डिफ़ॉल्ट रूप से, त्रुटि के बिना अंकगणित ओवरफ़्लो की अनुमति नहीं देता है (*unchecked-math* ध्वज देखें)। यह अंकगणितीय परिचालनों और कास्ट के आसपास अतिरिक्त जांच जोड़ता है, उदाहरण के लिए, (byte 128)
अपवाद का कारण बनता है। clojure v1.3.0 के बाद से वहाँ (unchecked-byte)
जो जावा कार्यक्षमता के बराबर है जैसे कार्यों ....
(unchecked-byte 128)
;=> -128 ; 2s-complement of 10000000
(unchecked-byte 2r10000001)
;=> -127 ; 2s-complement of 10000001
unchecked-*
उपलब्ध परिचालन (see clojuredocs) की एक पूरी बेड़ा रहे हैं कर रहे हैं।
यदि आप सीधे लंबे और unchecked-*
संचालन का उपयोग करते हैं तो आप अधिकतर वहां होते हैं, और फिर आप बिट्स/चेक बिट्स के लिए bit-*
संचालन का उपयोग कर सकते हैं।
अंत में एक परमाणु में अपनी बिसात भंडारण समझ में आता है, और आप तो (swap! chessboard fn args)
(थोड़ा अधिक मुहावरेदार स्वैप के साथ अद्यतन 15/02/13! कॉल) के साथ अपडेट
उदा
(inc Long/MAX_VALUE) ; java.lang.ArithmeticException
(unchecked-inc Long/MAX_VALUE) ; wraps.
-9223372036854775808
(def chessboard (atom 0))
@chessboard
;=> 0
(bit-test @chessboard 1)
;=> false
(swap! chessboard bit-flip 1)
;=> 2
(bit-test @chessboard 1)
;=> true
@chessboard
;=> 2
(reset! chessboard 0)
;=> 0
(swap! chessboard bit-flip 63)
;=> -9223372036854775808
(bit-test @chessboard 63)
;=> true
'सबसे अच्छा तरीका' - http://codereview.stackexchange.com/ पर अपना कोड दिखाएं; 'मुझे कैसे होना चाहिए' - रचनात्मक नहीं। आपके पास क्या कोड है? आपकी आवश्यकताओं क्या हैं? कहाँ रह गया। – sehe
@sehe मैंने java.lang.Long का उपयोग करने का प्रयास किया है लेकिन पार्सलॉन्ग() और "10000 ... x63" - 1x10^63) के साथ समस्याओं में भाग गया है, इसके अलावा, मुझे यकीन नहीं है कि मैं एक विशिष्ट पर बिट का उपयोग कर सकता हूं सूचकांक? मैं तर्कसंगत सुझावों और विचारों के लिए पूछ रहा हूं, जरूरी नहीं कि एक पूर्ण। – DanS
आपको इन सवालों को अपने प्रश्न में संपादित करना चाहिए। – sehe