2012-07-19 7 views
10

मैं निम्नलिखित दृश्योंक्लोजर में अनुक्रमों को कैसे जोड़ें?

(def a [1 2 3 4]) 
(def b [10 20 30 40]) 
(def c [100 200 300 400]) 

मैं तत्व द्वारा दृश्यों तत्व संयोजित करना चाहते हैं:

(... + a b c) 

मुझे देने के लिए:

[111 222 333 444] 

एक मानक समारोह करने के लिए उपलब्ध है इसलिए? या वैकल्पिक रूप से ऐसा करने के लिए एक अच्छा बेवकूफ तरीका क्या है?

+0

कार्यात्मक प्रोग्रामिंग में समानांतर समझ के विशेष कार्य आमतौर पर "ज़िप करने" के रूप में वर्णन किया गया है। कुछ कार्यात्मक भाषाओं में एक अलग "ज़िप" फ़ंक्शन होता है जिसका उपयोग "मानचित्र" के साथ किया जा सकता है जबकि अन्य भाषाएं "ज़िपमैप" फ़ंक्शन प्रदान करती हैं (कभी-कभी केवल "मानचित्र" कहा जाता है)। क्लोजर बाद के मामले में गिरता है। – Aaron

उत्तर

15

जो फ़ंक्शन आप ढूंढ रहे हैं वह map है।

(map + [1 2 3 4] [10 20 30 40] [100 200 300 400]) 
;=> (111 222 333 444) 

ध्यान दें कि map रिटर्न एक आलसी अनुक्रम, और नहीं एक वेक्टर के रूप में अपने उदाहरण में दिखाया गया। लेकिन आप into फ़ंक्शन का उपयोग कर एक खाली वेक्टर में आलसी अनुक्रम डाल सकते हैं।

(into [] (map + [1 2 3 4] [10 20 30 40] [100 200 300 400])) 
;=> [111 222 333 444] 

इसके अलावा, (पूर्णता के लिए, के रूप में यह एक और जवाब में बताया गया है) Clojure में आप mapv (map रूप में एक ही तर्क के साथ) के लिए एक वेक्टर परिणाम प्राप्त करने के लिए उपयोग कर सकते हैं 1.4.0+।

+3

+1 वाक्यांश का उपयोग "[अनुक्रम] में डालना ..." – Ashe

15

अगर आप clojure-1.4.0 या इसके बाद, आप mapv उपयोग कर सकते हैं का उपयोग करें:

user> (mapv + [1 2 3 4] [10 20 30 40] [100 200 300 400]) 
[111 222 333 444] 
संबंधित मुद्दे