ऐरे के बुनियादी ऑपरेशन लागू कीजिए।
फंक्शनल भाषाओं में length, map और reduce जैसे ऐरे ऑपरेशन बहुत आम हैं। पहले से मौजूद फंक्शन इस्तेमाल किए बिना बुनियादी ऐरे ऑपरेशनों की एक श्रृंखला लागू कीजिए।
लागू किए जाने वाले ऑपरेशनों की सही संख्या और नाम इस बात पर निर्भर करते हैं कि आप किस ट्रैक पर हैं, ताकि मौजूदा नामों से टकराव न हो। आम तौर पर आपको जो ऑपरेशन लागू करने होंगे, उनमें ये शामिल हैं:
append (दो ऐरे दिए जाने पर, दूसरे ऐरे के सारे एलिमेंट पहले ऐरे के अंत में जोड़िए);concatenate (ऐरों की एक श्रृंखला दिए जाने पर, सभी ऐरों के सारे एलिमेंट मिलाकर एक ही समतल ऐरे बनाइए);filter (एक प्रेडिकेट और एक ऐरे दिए जाने पर, वे सारे एलिमेंट वाला ऐरे लौटाइए जिनके लिए predicate(item) सही होता है);length (एक ऐरे दिए जाने पर, उसमें मौजूद कुल एलिमेंट की संख्या लौटाइए);map (एक फंक्शन और एक ऐरे दिए जाने पर, हर एलिमेंट पर function(item) लागू करने के नतीजों वाला ऐरे लौटाइए);foldl (एक फंक्शन, एक ऐरे और शुरुआती एक्युमुलेटर दिए जाने पर, हर एलिमेंट को बाईं ओर से एक्युमुलेटर में फोल्ड (रिड्यूस) कीजिए);foldr (एक फंक्शन, एक ऐरे और एक शुरुआती एक्युमुलेटर दिए जाने पर, हर एलिमेंट को दाईं ओर से एक्युमुलेटर में फोल्ड (रिड्यूस) कीजिए);reverse (एक ऐरे दिए जाने पर, एक ऐसा ऐरे लौटाइए जिसमें सारे मूल एलिमेंट हों, लेकिन उलटे क्रम में)।ध्यान रखिए कि फोल्ड फंक्शनों (foldl, foldr) को आर्गुमेंट किस क्रम में दिए जाते हैं, यह महत्वपूर्ण है।
ऊपर दिए गए निर्देश सभी भाषा ट्रैक में एकरूपता बनाए रखने के लिए एक साझा रिपॉज़िटरी के साथ सिंक रखे जाते हैं। यह परिशिष्ट ज़रूरत पड़ने पर अतिरिक्त स्पष्टता देता है या निर्देशों में बदलाव करता है, ताकि ये Clojure ट्रैक के लक्ष्यों से बेहतर मेल खाएँ।
Clojure ट्रैक के इस अभ्यास में यह मान लीजिए कि इनपुट और आउटपुट दोनों वेक्टर हैं, जैसा कि टेस्ट दिखाते हैं। एक अतिरिक्त लक्ष्य के तौर पर सोचिए कि ऐसा तरीका कैसे बनाया जाए जिसमें बीच के चरणों के लिए लिस्ट का उपयोग न हो।
मिलते-जुलते काम करने वाले Clojure के मौजूदा बिल्ट-इन फंक्शन दोबारा इस्तेमाल करने से बचना ज़रूरी है, क्योंकि ऐसा करने पर इस अभ्यास से मिलने वाला सीखने का लाभ कम हो जाएगा।
clojure.core नेमस्पेस के जिन मुख्य फंक्शन से बचना है, उनमें into, concat, cat, lazy-cat, mapcat, flatten, filter, filterv, remove, count, map, mapv, reduce, transduce, reverse और rseq शामिल हैं।
वैकल्पिक लक्ष्य उन लोगों के लिए है जो इससे आगे बढ़कर कुछ और करना चाहते हैं, और इसे बनाते समय यह मान लिया गया है कि आप मुख्य लक्ष्य पूरा कर चुके हैं।
टेस्ट पास करने के लिए ऐसा तरीका निकालिए जो यह मानता हो:
अगर आप इसे प्रकाशित करना चाहते हैं, तो ऐसा कमेंट ज़रूर शामिल कीजिए जिसमें बताया हो कि यह लिस्ट के इस्तेमाल वाले वैकल्पिक लक्ष्य को पूरा करता है। डॉकस्ट्रिंग में ज़रूरी बदलाव करना न भूलें!
Exercism पर साइन अप कीजिए और Clojure को 12 कॉन्सेप्ट105 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।
रिकर्शन का एक व्यावहारिक परिचय पाइए, ऐरे ऑपरेशन के इम्पेरेटिव और फंक्शनल विकल्प जानिए, और टेल-कॉल रिकर्शन तथा एक्युमुलेटर फंक्शनों की गहराई में उतरिए।