Clojure-এ একটি vector হলো শূন্য বা তার বেশি মানের একটি ক্রমিক, ইনডেক্সযুক্ত, অপরিবর্তনীয় সংগ্রহ। এর মানে হলো, একটি ভেক্টর একবার তৈরি হয়ে গেলে সেটি আর পরিবর্তন করা যায় না। ভেক্টরের উপর কাজ করার জন্য ফাংশনগুলো একটি নতুন ভেক্টর রিটার্ন করবে, আর মূল ভেক্টর অপরিবর্তিত থাকবে। একটি ভেক্টরের মানগুলো ভিন্ন ভিন্ন টাইপের হতে পারে। ভেক্টর ডিফাইন করা যায় এভাবে:
(def empty [])
(def single-value [5])
(def single-value-alternative (vector 5))
(def three-values [1 "a" "b"])
ইনডেক্স ব্যবহার করে একটি ভেক্টর থেকে এলিমেন্টগুলো পাওয়া যায়। Clojure ভেক্টর জিরো-বেজড, অর্থাৎ প্রথম এলিমেন্টের ইনডেক্স সবসময় শূন্য:
(def numbers [2 3 5])
;; Read value from vector
(get numbers 2)
;;=> 5
;; Update value in vector
(assoc numbers 2 9)
;;=> [2 3 9]
মূল ভেক্টর অপরিবর্তিত থাকে:
numbers
;;=> [2 3 5]
আপডেট করা মানটি মনে রাখতে হলে সেটি অন্যত্র পাঠাতে হবে, অথবা একটি var-এ ধরে রাখতে হবে:
(def updated-numbers
(assoc numbers 2 9))
(get updated-numbers 2)
;;=> 9
আপনি একজন আগ্রহী পাখি-পর্যবেক্ষক, যিনি গত সাত দিনে আপনার বাগানে কত পাখি এসেছে তার হিসাব রাখেন।
আপনার সামনে ছয়টি কাজ আছে, সবগুলোই আপনার বাগানে আসা পাখির সংখ্যা নিয়ে।
তুলনার সুবিধার জন্য আপনি সবসময় গত সপ্তাহের সংখ্যাগুলোর একটি কপি কাছে রাখেন, সেগুলো ছিল: 0, 2, 5, 3, 7, 8 আর 4। গত সপ্তাহের সংখ্যাগুলো নিয়ে একটি ভেক্টর তৈরি করুন:
last-week
;;=> [0 2 5 3 7 8 4]
আজ আপনার বাগানে কত পাখি এসেছে তা রিটার্ন করার জন্য today ফাংশনটি ডিফাইন করুন। পাখির সংখ্যাগুলো দিন অনুযায়ী সাজানো থাকে; প্রথম এলিমেন্টটি হলো সবচেয়ে পুরোনো দিনের সংখ্যা, আর শেষ এলিমেন্টটি আজকের সংখ্যা।
(def birds-per-day [2 5 0 7 4 1])
(today birds-per-day)
;;=> 1
আজকের সংখ্যা বাড়ানোর জন্য inc-bird ফাংশনটি ডিফাইন করুন:
(inc-bird birds-per-day)
;;=> [2 5 0 7 4 2]
day-without-birds? প্রেডিকেট ফাংশনটি ডিফাইন করুন, যা true রিটার্ন করে যদি এমন কোনো দিন থাকে যেদিন বাগানে একটিও পাখি আসেনি; নাহলে false রিটার্ন করে:
(day-without-birds? birds-per-day)
;;=> true
n-days-count ফাংশনটি ডিফাইন করুন, যা সপ্তাহের শুরু থেকে আপনার বাগানে আসা পাখির সংখ্যা রিটার্ন করে, তবে গণনাটি সপ্তাহের শুরু থেকে নির্দিষ্ট সংখ্যক দিনের মধ্যে সীমিত রাখুন।
(n-days-count birds-per-day 4)
;;=> 14
কিছু দিন অন্য দিনের চেয়ে ব্যস্ত থাকে। ব্যস্ত দিন হলো এমন দিন, যেদিন পাঁচটি বা তার বেশি পাখি আপনার বাগানে এসেছে।
ব্যস্ত দিনের সংখ্যা রিটার্ন করার জন্য busy-days ফাংশনটি ডিফাইন করুন:
(busy-days birds-per-day)
;;=> 2
গত এক বছরে আপনি দেখেছেন, কিছু সপ্তাহ একই অদ্ভুত প্যাটার্ন তৈরি করে, যেখানে পাখি আসার সংখ্যা এক আর শূন্যের মধ্যে পালা করে। odd-week? ফাংশনটি ডিফাইন করুন, যা true রিটার্ন করে যদি এই সপ্তাহের পাখি-সংখ্যার প্যাটার্নটি অদ্ভুত প্যাটার্নের সাথে মিলে যায়:
(odd-week? [1 0 1 0 1 0 1])
;;=> true
Exercism-এ সাইন আপ করুন, Clojure ট্র্যাকের 12টি কনসেপ্ট105টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।