2011-11-21 12 views
11

में एक खाली वेक्टर के लिए परीक्षण कैसे करें क्लोजर में खाली वेक्टर के लिए परीक्षण करने का सबसे अच्छा तरीका क्या है? मुझे उम्मीद थी कि यह झूठा प्रिंट करेगा:क्लोजर

(if [] "true" "false") 

लेकिन ऐसा नहीं है। यह करता है:

(if (> (count []) 0) "true" "false") 

लेकिन अनावश्यक है - क्या कोई छोटा निर्माण है?

+0

'[]' खाली वेक्टर है, खाली सूची नहीं, है ना? – Svante

+0

@ सवेन्ते हां। मुझे संदेह है कि केविन सिर्फ सामान्य रूप से एक खाली संग्रह के लिए परीक्षण करना चाहता है, लेकिन सूची कहने के दौरान अपने उदाहरण के लिए वेक्टर का उपयोग कर रहा है। – amalloy

+0

आप सही हैं; मैंने सवाल संपादित किया। हालांकि किसी समस्या में चल रहा है, क्योंकि लोग "क्लोजर टेस्ट रिक्त सूची" के लिए गुगल कर रहे हैं, इस सवाल को ढूंढना चाहेंगे ... –

उत्तर

27

मानक विधेय उपयोग (empty? list)

+7

इसके अतिरिक्त आपको यह निर्धारित करने का प्रयास करते समय (सीईसी सूची) का उपयोग करना चाहिए कि सूची खाली नहीं है या नहीं। – nickmbailey

+0

उस तरीके से सावधान रहें कि आप एक खाली अनुक्रम के रूप में 'शून्य' पर विचार करेंगे। '(खाली? शून्य); => सत्य 'और '(seq nil); => शून्य '। मेरे कुछ मामलों में यह वांछित व्यवहार नहीं था इसलिए मैं परीक्षण के लिए '# (और% (खाली?%)' के साथ जाऊंगा कि क्या कुछ "अनुक्रम और खाली" है। – foki

0

Mishadoff के जवाब के अलावा (जो और अधिक पठनीय है), तो आप भी एक खाली सूची को अपने ख़िलाफ़ तुलना कर सकते हैं (और लंबाई में दो पात्रों बचाने के लिए) में:

(if (=() []) "true" "false") 

हममम ... मुझे अभी भी लगता है कि मैं मिशडोफ का जवाब पसंद करता हूं।

+0

बस यह भी महसूस किया कि शून्य शून्य पर मूल्यांकन करता है, आप बस उपयोग कर सकते हैं (गिनती [])। अभी भी खाली है? जाने का रास्ता है। –

+5

क्लोजर में केवल 'शून्य' और 'झूठी' तार्किक झूठी गठबंधन है। शून्य सत्य है। – Scott

+1

यह एक अच्छा दृष्टिकोण नहीं है। शून्य बराबर नहीं है(), लेकिन इसे खाली सूची के रूप में माना जाना चाहिए। – amalloy

16

गैर-खाली सूची की जांच करने के लिए क्लोजर कोड में सबसे आम तरीका है seq का उपयोग करना है। यदि संग्रह खाली है, या अन्यथा मान्य सीक ऑब्जेक्ट अन्यथा शून्य हो जाता है। उपयोग के

उदाहरण:

(seq []) 
=> nil 

(seq nil) 
=> nil 

(seq [1 2 3]) 
=> (1 2 3)   ;; note this is a "true value" 

(if (seq [1 4 6]) "true" "false") 
=> "true" 

(if (seq []) "true" "false") 
=> "false" 

तुम भी (एक खाली सेट के लिए अर्थात परीक्षण) empty? उपयोग कर सकते हैं विपरीत परीक्षण करने के लिए। ध्यान दें कि खाली? क्लोजर स्रोत कोड में (not (seq coll)) के रूप में लागू किया गया है ताकि आप ज्ञान में सुरक्षित रह सकें कि दोनों दृष्टिकोण मौलिक रूप से समकक्ष हैं।