Haskell এ Lists, Sets, এবং Maps এর ধারণা
Haskell একটি শক্তিশালী ফাংশনাল প্রোগ্রামিং ভাষা যা বিভিন্ন ডেটা স্ট্রাকচার সমর্থন করে। এর মধ্যে Lists, Sets, এবং Maps অত্যন্ত গুরুত্বপূর্ণ। এই ডেটা স্ট্রাকচারের প্রতিটির নিজস্ব বৈশিষ্ট্য, ব্যবহার এবং সুবিধা রয়েছে। নিচে প্রতিটি ডেটা স্ট্রাকচারের বিস্তারিত ব্যাখ্যা দেওয়া হলো।
1. Lists
List Haskell এর অন্যতম মৌলিক এবং সবচেয়ে ব্যবহৃত ডেটা স্ট্রাকচার। এটি একটি হোমোজেনিয়াস (সমান টাইপের উপাদান) সিকোয়েন্স বা ক্রমবদ্ধ সংগ্রহ, যেখানে উপাদানগুলো একের পর এক সংরক্ষিত হয়। Lists এক ধরনের ইমিউটেবল ডেটা স্ট্রাকচার, অর্থাৎ একবার তৈরি হলে এটি পরিবর্তন করা যায় না।
List এর বৈশিষ্ট্য:
- Haskell এ List এর উপাদানগুলি একই টাইপের হতে হবে।
- List এর উপাদানগুলি ক্রমান্বয়ে সাজানো থাকে।
- Lists ইমিউটেবল (immutable) হয়, অর্থাৎ একবার তৈরি হলে এর মান পরিবর্তন করা যায় না।
List এর উদাহরণ:
myList :: [Int]
myList = [1, 2, 3, 4, 5]এখানে, myList একটি Int টাইপের List যা [1, 2, 3, 4, 5] উপাদান ধারণ করে।
List এর কিছু অপারেশন:
head: প্রথম উপাদান রিটার্ন করে।
head [1, 2, 3] -- আউটপুট: 1tail: প্রথম উপাদান বাদ দিয়ে বাকি List রিটার্ন করে।
tail [1, 2, 3] -- আউটপুট: [2, 3]length: List এর দৈর্ঘ্য রিটার্ন করে।
length [1, 2, 3] -- আউটপুট: 3++: দুটি List একত্রিত করে।
[1, 2] ++ [3, 4] -- আউটপুট: [1, 2, 3, 4]
2. Sets
Set হলো একটি ডেটা স্ট্রাকচার যা কোনো ডুপ্লিকেট উপাদান রাখে না এবং উপাদানগুলোর কোন নির্দিষ্ট ক্রম থাকে না। Haskell এ Set টাইপটি Data.Set মডিউল থেকে আসে এবং এটি সঠিকভাবে কাজ করার জন্য একটি অর্ডার্ড উপাদান সংগ্রহে থাকে। Sets সাধারণত গাণিতিক গোষ্ঠী এবং গণনা বা ডেটা বিশ্লেষণের জন্য ব্যবহৃত হয়।
Set এর বৈশিষ্ট্য:
- Set এর উপাদানগুলি অর্ডারড না হতে পারে, তবে এগুলোর মধ্যে ডুপ্লিকেট থাকতে পারে না।
Setসাধারণত নির্দিষ্ট এলিমেন্ট খোঁজার জন্য এবং গণনা করতে ব্যবহৃত হয়।
Set এর উদাহরণ:
import qualified Data.Set as Set
mySet :: Set.Set Int
mySet = Set.fromList [1, 2, 3, 4, 5, 5]এখানে, mySet একটি Set যা [1, 2, 3, 4, 5] উপাদান ধারণ করে, তবে 5 ডুপ্লিকেট হওয়ায় এটি একবারই থাকবে।
Set এর কিছু অপারেশন:
insert: Set এ নতুন উপাদান যোগ করা।
Set.insert 6 mySet -- আউটপুট: fromList [1,2,3,4,5,6]member: Set এ কোনো উপাদান উপস্থিত কিনা তা চেক করা।
Set.member 3 mySet -- আউটপুট: True Set.member 6 mySet -- আউটপুট: Falseunion: দুটি Set এর একত্রিত সন্নিবেশ।
Set.union mySet (Set.fromList [6, 7]) -- আউটপুট: fromList [1,2,3,4,5,6,7]
3. Maps
Map একটি ডেটা স্ট্রাকচার যা কী এবং মানের (key-value pair) মধ্যে সম্পর্ক স্থাপন করে। Haskell এ Map টাইপটি Data.Map মডিউল থেকে আসে এবং এটি অর্ডারড এবং ডুপ্লিকেট কী ধারণ করতে পারে না। মানগুলি অনুসন্ধান, আপডেট এবং সরানো সহজ করার জন্য এটি খুবই উপযোগী।
Map এর বৈশিষ্ট্য:
- Map এ কী এবং তার সাথে সম্পর্কিত মান থাকে।
- প্রতিটি কী ইউনিক হওয়া উচিত, এবং মানগুলি অনুসন্ধান, আপডেট বা মুছে ফেলা সহজ হয়।
Map এর উদাহরণ:
import qualified Data.Map as Map
myMap :: Map.Map String Int
myMap = Map.fromList [("apple", 1), ("banana", 2), ("cherry", 3)]এখানে, myMap একটি Map যা তিনটি কী-মান যুগল ধারণ করে: "apple" -> 1, "banana" -> 2, এবং "cherry" -> 3।
Map এর কিছু অপারেশন:
insert: একটি নতুন কী-মান যুগল যোগ করা।
Map.insert "date" 4 myMap -- আউটপুট: fromList [("apple",1),("banana",2),("cherry",3),("date",4)]lookup: একটি কী এর মান খোঁজা।
Map.lookup "banana" myMap -- আউটপুট: Just 2 Map.lookup "date" myMap -- আউটপুট: Nothingdelete: একটি কী-মান যুগল মুছে ফেলা।
Map.delete "cherry" myMap -- আউটপুট: fromList [("apple",1),("banana",2)]
তুলনা: Lists, Sets, এবং Maps
| বৈশিষ্ট্য | Lists | Sets | Maps |
|---|---|---|---|
| টাইপ | হোমোজেনিয়াস (সমান টাইপের উপাদান) | হেটেরোজেনিয়াস (বিভিন্ন টাইপের উপাদান) | কী-মান যুগল |
| ডুপ্লিকেট | ডুপ্লিকেট থাকতে পারে | ডুপ্লিকেট থাকতে পারে না | কী এর ডুপ্লিকেট থাকতে পারে না |
| অর্ডার | অর্ডার সুরক্ষিত | অর্ডার সুরক্ষিত না | অর্ডার সুরক্ষিত (অর্ডার্ড ম্যাপ) |
| ব্যবহার | ক্রমবদ্ধ ডেটা | গণনা বা ইউনিক উপাদান স্টোর করা | কী এবং মানের সম্পর্ক স্টোর করা |
উপসংহার
Haskell এ Lists, Sets, এবং Maps তিনটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা বিভিন্ন পরিস্থিতিতে ব্যবহৃত হয়।
- List ব্যবহার করা হয় ক্রমবদ্ধ এবং একধরনের উপাদান সংরক্ষণের জন্য,
- Set ব্যবহৃত হয় ইউনিক উপাদান সংরক্ষণের জন্য এবং ডুপ্লিকেট এড়াতে,
- Map ব্যবহৃত হয় কী এবং তার মানের সম্পর্ক সঠিকভাবে স্টোর করার জন্য।
এই তিনটি ডেটা স্ট্রাকচার Haskell এ অনেক সময় গণনা, ডেটা বিশ্লেষণ, এবং অন্যান্য সফটওয়্যার ডিজাইন কাজে খুবই কার্যকরী।
Read more