2013-07-17 5 views
7

मेरे पास कुछ मूल्यों वाले तत्वों की एक सूची है।किसी सूची में दो तर्क फ़ंक्शन को कैसे मैप करें?

मैं इसे किसी फ़ंक्शन में मैप करना चाहता हूं और इसमें एक सूची तैयार करना चाहता हूं, जो कि इन दो तर्क फ़ंक्शन को पहली सूची में लगातार मानों पर लागू करके गणना की गई मानों का निर्माण करती है।

इस सूची में एक कम तत्व होगा।

मैपिंग फ़ंक्शन को एक समय में दो तर्क लेना चाहिए।

संपादित

उदाहरण

दो तर्क समारोह मैं उपयोग कर रहा हूँ, काफी जटिल है, इसलिए के लिए सादगी यह मान लें कि एक समारोह है कि दो संख्याओं का औसत गणना होने की सुविधा देता है।

यदि मेरे पास कोई सूची है: [3 8 11 14 19 20 88]

क्या यह संभव है मेरे लिए दो एक समारोह के नक्शे है कि मेरे average समारोह जो (average 3 8) के लिए 5.5

(average 8 11) के लिए

दे देंगे 9.5

और (average 11 14)12.5

और इतने पर दे देंगे दे देंगे लिखें। ..

पर सूची के लगातार दो मूल्यों को औसतन लागू करने पर ime मुझे देना चाहिए।

[5.5 9.5 12.5 16.5 19.5 54.0] 

परिणामस्वरूप।

नक्शा पूरी सूची में एक एकल तर्क फ़ंक्शन लागू करता है और तत्वों की एक ही संख्या के साथ एक नई सूची उत्पन्न करता है।

जो मैं चाहता हूं वह मेरे कार्य को लागू करने का एक तरीका है जो एक बार में लगातार दो बार लेने के लिए दो तर्क लेता है, मेरे कार्य को लागू करता है और परिणाम को एक नई सूची में जोड़ता है।

+0

आप कुछ सरल उदाहरण जोड़ सकते हैं? –

+0

क्या आपका मतलब कम है (http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/reduce)? –

उत्तर

11

आप नक्शे के साथ यह कर सकते हैं:

(map f coll (rest coll)) 
+0

यह काम करता है! मानचित्र दो से अधिक तर्क कैसे लेता है? इस मामले में मानचित्रण कैसे काम करता है? तो यह पारित प्रत्येक सूची से एक तर्क चुनता है? जब तक सूची में से कोई एक समाप्त नहीं होता है? –

+0

'तो यह पारित प्रत्येक सूची से एक तर्क चुनता है? जब तक सूची में से कोई समाप्त नहीं होता है? '- हाँ, बिल्कुल। पारित एफएन को कई तर्क लेना चाहिए क्योंकि 'नक्शा' में सीक पास हुए हैं। – Alex

+0

@ अमोगतालपल्लीकर आप 'नक्शा' और [क्लोजर डॉक्स] में अन्य कार्यों के बारे में अधिक पढ़ सकते हैं (http: // clojuredocs।org/clojure_core/clojure.core/नक्शा)। –

7
(fn [f coll] (map #(apply f %1) (partition 2 1 coll)) 

सीधे 4clojure पर जाएं!

+5

ग्रेट! बीटीडब्ल्यू '# (एफ% 1 लागू करें) 'को बदला जा सकता है' (आंशिक लागू एफ)' – mishadoff

+0

4clojure! वाह! यह एक महान जगह प्रतीत होता है। –

+0

या बस '# (एफ% कम करें)' – film42

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