क्लोजर में परमाणु कहलाता है जिसे अन्य लिस्पस में परमाणु कहा जाता है उससे बिल्कुल अलग है।
(define (atom? x)
(not (or (pair? x)
(null? x))))
Clojure में एक परमाणु संगामिति संदर्भ प्रकार है: क्लासिक लिस्प में एक परमाणु एकल मान, अशक्त या नहीं एक विपक्ष सेल (जोड़ी) नहीं होने के रूप में परिभाषित किया गया है। क्लोजर में परमाणु या तो एकल मूल्यवान या संग्रह/अनुक्रम हो सकते हैं, जहां अद्यतन (परिवर्तनीय राज्य परिवर्तन) परमाणु रूप से होने की गारंटी है।
क्लोजर में लिस्प में विपक्ष सूची की तुलना में कहीं अधिक संदर्भ प्रकार हैं, और वहां सभी जावा इंटरऑप संग्रह प्रकारों के साथ गणना की जा सकती है। इससे सिंगल-वैल्यू पर चेक को परिभाषित करना मुश्किल हो जाता है।
यदि आप चाहते हैं, तो सबसे सरल जांच यह देखने के लिए है कि कुछ गिना जा सकता है या नहीं। (source counted)
पर देखकर, यह clojure.lang.RT/गिनती और गिनती से संदर्भित करता है। वहाँ, कई वर्गों/इंटरफेस निर्दिष्ट कर रहे हैं, जो मैं निम्नलिखित समारोह में शामिल:
=> (defn single-valued?
[x]
(not (or (nil? x)
(.. x getClass isArray)
(some #(instance? % x) [clojure.lang.Counted
clojure.lang.IPersistentCollection
java.util.Collection
java.util.Map]))))
=> (map single-valued? [1 "foo" \a 'x true not nil])
(true true true true true true false)
=> (map single-valued? ['(1 2 3 4)
[1 2 3 4]
{:a 1 :b 2}
#{1 2 3 4}
(seq [1 2 3 4])
(seq {:a 1 :b 2})
(seq "foo")
(int-array [1 2 3 4])
(seq [])])
(false false false false false false false false false)
(seq [])
चूंकि यह एकल महत्वपूर्ण नहीं माना जाता है nil
मूल्यांकन करता है। बेशक, कई क्षेत्रों के साथ जावा ऑब्जेक्ट्स, साथ ही क्लोजर डेफ्टीप्स/डिफ्रॉर्ड्स इस तरह पंजीकृत होंगे, भले ही वे समग्र वस्तुएं हों।
'अगर परमाणु' है नहीं एक समारोह, 'सूची कैसे आती है?' है? मैं 'सूची' का उपयोग किसी फ़ंक्शन की तरह कर सकता हूं और यह काम करता है, लेकिन 'परमाणु?' नहीं। यह सब बहुत संदिग्ध लगता है ... – Zchpyvr
@Zchpyvr 'list? 'केवल एक फ़ंक्शन की तरह नहीं है, लेकिन _is_ मानक लाइब्रेरी में स्पष्ट रूप से कार्यान्वित किया गया एक फ़ंक्शन और http://clojure.org/cheatsheet पर प्रलेखित किया गया है; 'परमाणु? 'नहीं है। –