মৌলিক অ্যারে অপারেশন ইমপ্লিমেন্ট করুন।
ফাংশনাল ভাষায় length, map, ও reduce-এর মতো অ্যারে অপারেশন খুবই কমন। বিদ্যমান ফাংশন ব্যবহার না করেই একগুচ্ছ মৌলিক অ্যারে অপারেশন ইমপ্লিমেন্ট করুন।
বিদ্যমান নামের সঙ্গে সংঘর্ষ এড়াতে যে অপারেশনগুলো ইমপ্লিমেন্ট করা হবে তার সঠিক সংখ্যা ও নাম track-এর উপর নির্ভর করবে, তবে আপনি যে সাধারণ অপারেশনগুলো ইমপ্লিমেন্ট করবেন সেগুলো হলো:
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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।
রিকারশনের একটি ব্যবহারিক পরিচিতি উপভোগ করুন, অ্যারে অপারেশনের ইম্পারেটিভ ও ফাংশনাল বিকল্পগুলো ঘেঁটে দেখুন, আর টেল-কল রিকারশন ও অ্যাকুমুলেটর ফাংশনের গভীরে ডুব দিন।