2013-06-23 20 views
5

के परिणाम से स्ट्रिंग बनाने में विफल रहता है। मैं एक फ़ंक्शन लिखने की कोशिश कर रहा हूं जो एक स्ट्रिंग लेता है और फ़िल्टर फ़ंक्शन का परिणाम देता है (मैं 4clojure समस्याओं के माध्यम से काम कर रहा हूं)। नतीजा भी एक स्ट्रिंग होना चाहिए।क्लोजर जॉइन फ़िल्टर फ़ंक्शन

मैं इस लिखा है:

(fn my-caps [s] 
    (filter #(Character/isUpperCase %) s)) 

(my-caps "HeLlO, WoRlD!") 

Result: (\H \L \O \W \R \D) 

अब मैं, में शामिल होने के clojure.string का उपयोग कर एक स्ट्रिंग इस सूची से बाहर बनाने के लिए कोशिश कर रहा हूँ,/इस तरह:

(fn my-caps [s] 
    (clojure.string/join (filter #(Character/isUpperCase %) s))) 

परिणाम हालांकि वही है। मैंने बिना किसी सफलता के apply str का उपयोग करने का भी प्रयास किया है।

उत्तर

3

इस प्रयास करें:

(defn my-caps [s] 
    (->> (filter #(Character/isUpperCase %) s) 
     (apply str))) 

filter समारोह एक आलसी अनुक्रम देता है। यदि आप string प्राप्त करना चाहते हैं, तो आपको अनुक्रम को str फ़ंक्शन लागू करके स्ट्रिंग में बदलना चाहिए।

+0

धन्यवाद! यह मुझे डबल तीर-थ्रेडिंग मैक्रो दिखता है। मुझे पहले थ्रेड मैक्रोज़ के बारे में पता नहीं था। –

+0

@ntalbs, यहां '- >>' ऑपरेटर का उपयोग क्यों करें? एक सरल फंक्शन कॉल 'लागू' –

+2

@ ÓscarLópez हाँ को आमंत्रित करने के लिए पर्याप्त है, आप सही हैं। नतीजा वही है। हालांकि, '- >>' का उपयोग करके कोड पढ़ने को पढ़ने और मेरे विचार प्रक्रिया के रूप में टाइप करना आसान हो जाता है। बस। यह एक तरह की व्यक्तिगत वरीयता है। – ntalbs

4

str फ़ंक्शन को लागू करके आपको filter द्वारा आलसी अनुक्रम को एक स्ट्रिंग में परिवर्तित करना होगा। इसके अलावा, defn का उपयोग एक नया कार्य परिभाषित करने के लिए - यहां देखें:

(defn my-caps [s] 
    (apply str (filter #(Character/isUpperCase %) s))) 

यह काम करता है के रूप में उम्मीद:

(my-caps "HeLlO, WoRlD!") 
=> "HLOWRD" 
4

पिछले कोड आप चिपकाया स्निपेट ठीक काम करता है। join वास्तव में एक स्ट्रिंग वापस करता है।

+0

आप सही हैं। अब तक मैं फ़ाइल को आरईपीएल में पुनः लोड कर रहा हूं लेकिन वास्तव में इसे फिर से शुरू करने के बाद ही यह काम करता है। थ्रेड हालांकि कचरा नहीं था - मैंने संग्रह से स्ट्रिंग बनाने के नए तरीकों को सीखा है। –

संबंधित मुद्दे