লিস্ট হল প্রোলগে একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা এক বা একাধিক উপাদান ধারণ করতে পারে। প্রোলগে লিস্টের সাধারণ গঠন হল:
[Head | Tail]এখানে:
- Head: লিস্টের প্রথম উপাদান।
- Tail: বাকি উপাদানগুলির লিস্ট। এটি আবার একটি লিস্ট হতে পারে বা খালি ([]) হতে পারে।
এটি হেড এবং টেইল এর মাধ্যমে লিস্টের উপাদানগুলি প্রবাহিত এবং ট্র্যাভার্স করা সহজ করে।
লিস্ট তৈরি:
লিস্ট তৈরি করতে, প্রোলগে উপাদানগুলো [Head | Tail] এর মাধ্যমে নির্দেশ করা হয়। উদাহরণস্বরূপ:
লিস্ট1([1, 2, 3, 4, 5]).এখানে, [1, 2, 3, 4, 5] একটি লিস্ট।
লিস্টের মধ্যে হেড এবং টেইল গঠন করা যায়:
?- [1, 2, 3, 4] = [Head | Tail].এখানে, Head হবে 1 এবং Tail হবে [2, 3, 4]।
লিস্ট ম্যানিপুলেশন:
প্রোলগে, লিস্টের উপাদানগুলি সহজেই ম্যানিপুলেট করা যায়। কিছু সাধারণ অপারেশন এবং তাদের ব্যবহার:
১. লিস্টের প্রথম উপাদান (Head) বের করা:
?- [a, b, c] = [Head | Tail].এখানে, Head হবে a এবং Tail হবে [b, c]।
২. লিস্টের দৈর্ঘ্য (Length) বের করা:
লিস্ট_দৈর্ঘ্য([], 0). % বেস কেস: খালি লিস্টের দৈর্ঘ্য 0
লিস্ট_দৈর্ঘ্য([_|Tail], Length) :- লিস্ট_দৈর্ঘ্য(Tail, Length1), Length is Length1 + 1.এটি একটি রিকার্সিভ নিয়ম যা লিস্টের দৈর্ঘ্য বের করতে সাহায্য করে।
উদাহরণ:
?- লিস্ট_দৈর্ঘ্য([a, b, c, d], Length).আউটপুট:
Length = 4.৩. লিস্টের প্রথম উপাদান বের করে নতুন লিস্ট তৈরি:
আপনি যদি লিস্টের প্রথম উপাদান বের করে বাকি উপাদান নিয়ে নতুন একটি লিস্ট তৈরি করতে চান, তাহলে এই নিয়মটি ব্যবহার করা যায়:
লিস্ট_হেড_ও_টেইল([Head | Tail], Head, Tail).উদাহরণ:
?- লিস্ট_হেড_ও_টেইল([1, 2, 3], Head, Tail).আউটপুট:
Head = 1,
Tail = [2, 3].৪. লিস্টের উপাদান যোগ করা (Prepend):
আপনি একটি নতুন উপাদান একটি লিস্টের শুরুতে যোগ করতে পারেন:
লিস্ট_যোগ(X, L, [X | L]).উদাহরণ:
?- লিস্ট_যোগ(0, [1, 2, 3], NewList).আউটপুট:
NewList = [0, 1, 2, 3].৫. লিস্টের উপাদান মুছে ফেলা (Remove):
একটি নির্দিষ্ট উপাদান লিস্ট থেকে মুছে ফেলার জন্য এই নিয়মটি ব্যবহার করতে পারেন:
লিস্ট_মুছে_ফেলা(_, [], []).
লিস্ট_মুছে_ফেলা(X, [X | Tail], Tail).
লিস্ট_মুছে_ফেলা(X, [Head | Tail], [Head | NewTail]) :- লিস্ট_মুছে_ফেলা(X, Tail, NewTail).উদাহরণ:
?- লিস্ট_মুছে_ফেলা(2, [1, 2, 3, 2], NewList).আউটপুট:
NewList = [1, 3, 2].৬. লিস্টের সব উপাদান চেক করা (Check all elements):
লিস্টের সব উপাদানকে চেক করতে এবং কোনো শর্ত পূর্ণ হলে লিস্টে সেগুলো পরিবর্তন বা ফিল্টার করতে এই নিয়ম ব্যবহার করা যায়:
লিস্ট_ফিল্টার(_, [], []).
লিস্ট_ফিল্টার(Predicate, [Head | Tail], [Head | NewTail]) :- call(Predicate, Head), লিস্ট_ফিল্টার(Predicate, Tail, NewTail).
লিস্ট_ফিল্টার(Predicate, [_ | Tail], NewTail) :- লিস্ট_ফিল্টার(Predicate, Tail, NewTail).উদাহরণ:
?- লিস্ট_ফিল্টার(অথেক(>3), [1, 2, 3, 4, 5], Filtered).এখানে, অথেক(>3) একটি শর্ত (predicate), যা ৩ এর বড় সংখ্যা গুলি বের করবে।
আরও কিছু লিস্ট অপারেশন:
৭. লিস্টের যোগফল বের করা (Sum of List):
লিস্টের সব উপাদানের যোগফল বের করতে রিকার্সিভ নিয়ম ব্যবহার করা যায়:
লিস্ট_যোগফল([], 0).
লিস্ট_যোগফল([Head | Tail], Sum) :- লিস্ট_যোগফল(Tail, Sum1), Sum is Head + Sum1.উদাহরণ:
?- লিস্ট_যোগফল([1, 2, 3, 4], Sum).আউটপুট:
Sum = 10.৮. লিস্টের উপাদান সাজানো (Sorting List):
লিস্টের উপাদান সাজাতে প্রোলগে বিল্ট-ইন predicate sort/2 ব্যবহার করা যায়:
?- sort([3, 1, 4, 2], SortedList).আউটপুট:
SortedList = [1, 2, 3, 4].সারসংক্ষেপ:
প্রোলগে লিস্ট ব্যবহার এবং ম্যানিপুলেশন খুবই শক্তিশালী এবং সহজ। লিস্টের উপাদানগুলির উপর বিভিন্ন ধরনের অপারেশন যেমন যোগফল, ফিল্টারিং, টেইল/হেড ব্যবহার, উপাদান মুছে ফেলা, ইত্যাদি সহজেই করা যায়। প্রোলগে রিকার্সিভ নিয়ম ব্যবহার করে লিস্টের উপাদানগুলোকে ট্রাভার্স এবং ম্যানিপুলেট করা যায়, যা প্রোগ্রামিংয়ের অনেক সমস্যার সমাধানে উপকারী।
Read more