2010-07-31 13 views
5

बंद के साथक्लोजर (लागू str) प्रश्न?

(apply str [\a \b]) 

और

(apply str '(\a \b)) 

रिटर्न "ab"।

(apply str (\a \b)) 

एक त्रुटि देता है।

वह क्यों है?

+0

मुझे क्लोजर नहीं पता, लेकिन क्या यह संभव है [] एक सूची है लेकिन() कुछ और है? – jtbandes

+1

@jtbandes: [] एक वेक्टर है (लगता है कि एक सरणी बढ़ती है)।() एक सूची है लेकिन अगर इसे उद्धृत नहीं किया गया है तो इसे एक समारोह के रूप में मूल्यांकन किया जाता है। यह कोड लिप्स के आसपास डेटा चीज है। – nickik

उत्तर

14

क्योंकि (\a \b) का अर्थ है "\b का एक तर्क के साथ समारोह \a कॉल", और के बाद से चरित्र \a एक समारोह नहीं है, यह विफल रहता है। नोट निम्नलिखित में अंतर:

 
user=> (+ 1 2 3) 
6 
user=> '(+ 1 2 3) 
(+ 1 2 3) 

एक सामान्य नियम के रूप में, यदि आप एक शाब्दिक अनुक्रम लिखने एक उद्धृत सूची के बजाय एक सदिश का उपयोग के बाद से उद्धरण भी सूची के अंदर भागों के मूल्यांकन बंद हो जाएगा करना चाहते हैं, उदाहरण:

 
user=> [(+ 1 2) (+ 3 4)] 
[3 7] 
user=> '((+ 1 2) (+ 3 4)) 
((+ 1 2) (+ 3 4)) 
संबंधित मुद्दे