প্রোলগ প্রোগ্রামিং ভাষায় ফ্যাক্টস এবং রুলস খুব গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলোর মাধ্যমে জ্ঞানভিত্তিক সিস্টেম তৈরি করা যায় এবং লজিক্যাল সিদ্ধান্ত নেওয়া হয়।
১. ফ্যাক্ট (Fact)
ফ্যাক্ট হলো এমন একটি মৌলিক তথ্য বা স্টেটমেন্ট যা সিস্টেমে সত্য হিসেবে গৃহীত হয়। এটি সাধারণত একটি সম্পর্ক বা তথ্য প্রকাশ করে। প্রোলগে ফ্যাক্টের মাধ্যমে আমরা কোনো সম্পর্ক বা ঘটনার তথ্য সংরক্ষণ করি।
ফ্যাক্টের সিনট্যাক্স:
relation_name(argument1, argument2, ...).এখানে:
- relation_name: সম্পর্কের নাম (যেমন: পিতা, মা, ছাত্র ইত্যাদি)।
- argument1, argument2, ...: সম্পর্কের আর্গুমেন্টগুলি, যেগুলো সম্পর্কের সাথে যুক্ত তথ্য বা ভেরিয়েবল।
ফ্যাক্টের উদাহরণ:
পিতা(অজিজ, রহমান).
মা(মিনা, রহমান).এখানে:
- পিতা(অজিজ, রহমান): এটি বলে যে অজিজ পিতা রহমান।
- মা(মিনা, রহমান): এটি বলে যে মিনা মা রহমান।
ফ্যাক্টের ব্যবহার:
- ফ্যাক্ট গুলো তথ্য সংগ্রহ করতে এবং সম্পর্ক তৈরি করতে ব্যবহার করা হয়। আমরা পরে কোয়ারি বা নিয়ম এর মাধ্যমে এগুলোর সাথে কাজ করতে পারি।
২. রুলস (Rules)
রুলস প্রোলগের একটি শক্তিশালী বৈশিষ্ট্য, যা শর্তাধীন সিদ্ধান্ত নিতে ব্যবহৃত হয়। একটি রুল বলতে, যদি কিছু শর্ত পূর্ণ হয়, তবে তা দিয়ে কিছু সিদ্ধান্ত নেয়া যায়। প্রোলগে, রুলস :- (colon dash) ব্যবহার করে লেখা হয়, যা "যদি" অর্থে ব্যবহৃত হয়।
রুলের সিনট্যাক্স:
head :- body.এখানে:
- head: রুলের মূল অংশ, যা প্রমাণ করতে হবে বা সিদ্ধান্ত নেওয়ার জন্য প্রয়োজনীয়।
- body: শর্ত বা পরিস্থিতি, যা পূর্ণ হলে মূল অংশটি সত্য হবে।
রুলসের উদাহরণ:
পিতা(X, Y) :- পিতা(Y, Z).এটি বলে যে, X যদি Y এর পিতা হয়, তবে Y এর পিতা Z হবে।
এখানে:
- পিতা(X, Y) হল head।
- পিতা(Y, Z) হল body।
এটি recursive নিয়মের উদাহরণ, যেখানে একাধিক স্তরের সম্পর্কের মাধ্যমে সিদ্ধান্ত নেওয়া হয়।
আরেকটি উদাহরণ:
দাদা(X, Y) :- পিতা(X, Z), পিতা(Z, Y).এটি বলে যে, X যদি Z এর পিতা হয় এবং Z যদি Y এর পিতা হয়, তবে X হল Y এর দাদা।
এখানে:
- দাদা(X, Y) হল head।
- পিতা(X, Z), পিতা(Z, Y) হল body।
এটি দুটি শর্ত AND অপারেটর দিয়ে যুক্ত (, দ্বারা) যা মানে হল যে, X কে Y এর দাদা হতে হলে, প্রথমে X-এর পিতা Z হতে হবে এবং পরে Z-এর পিতা Y হতে হবে।
ফ্যাক্ট এবং রুলস এর পার্থক্য:
| বৈশিষ্ট্য | ফ্যাক্ট | রুলস |
|---|---|---|
| সংজ্ঞা | মৌলিক সত্য বা তথ্য | শর্তসাপেক্ষ সিদ্ধান্ত গ্রহণ |
| কোডের ফর্ম | relation_name(argument1, argument2). | head :- body. |
| ব্যবহার | সম্পর্ক বা তথ্য সন্নিবেশিত করার জন্য ব্যবহৃত | সিদ্ধান্ত নেয়ার জন্য ব্যবহৃত |
| উদাহরণ | পিতা(অজিজ, রহমান). | পিতা(X, Y) :- পিতা(Y, Z). |
ফ্যাক্ট এবং রুলস ব্যবহার:
প্রোলগে ফ্যাক্ট এবং রুলসের মাধ্যমে আপনি লজিক্যাল সম্পর্ক এবং ব্যাকট্র্যাকিং পদ্ধতির মাধ্যমে প্রোগ্রাম তৈরি করতে পারেন।
উদাহরণ:
% ফ্যাক্ট:
পিতা(অজিজ, রহমান).
পিতা(রহমান, সোহেল).
পিতা(সোহেল, তারেক).
% রুল:
দাদা(X, Y) :- পিতা(X, Z), পিতা(Z, Y).এখন আপনি কোয়ারি করতে পারেন:
?- দাদা(অজিজ, Y).এটি ফলস্বরূপ:
Y = সোহেল.এখানে, প্রোলগ প্রথমে চেক করবে যে অজিজ এর পিতা রহমান, এবং পরে রহমান এর পিতা সোহেল, তাই অজিজ এর দাদা হল সোহেল।
সারসংক্ষেপ
ফ্যাক্ট হল সোজা তথ্য যা কোনো সম্পর্ক বা ঘটনা বর্ণনা করে, এবং রুলস হল শর্তাধীন বিবৃতি যা কোনো সম্পর্ক বা তথ্য প্রমাণ করতে সাহায্য করে। প্রোলগে এই দুটি উপাদান ব্যবহার করে লজিক্যাল সিদ্ধান্ত গ্রহণ করা হয়, এবং এতে ব্যাকট্র্যাকিং এবং ইনফারেন্স প্রক্রিয়া ব্যবহার করা হয়।
ফ্যাক্ট (Fact) হল প্রোলগের একটি মৌলিক উপাদান যা সত্য বা নিশ্চিত তথ্য প্রকাশ করে। এটি একটি নির্দিষ্ট সম্পর্ক বা জ্ঞানভিত্তিক তথ্য সরাসরি জানায়, যা প্রোগ্রামে ব্যবহারকারীর দ্বারা প্রমাণিত বা নির্ধারিত হয়। প্রোলগে ফ্যাক্ট একটি লজিক্যাল বিবৃতি বা তথ্য যা সত্য হতে পারে, যেমন "অজিজ পিতা রহমান"।
ফ্যাক্ট প্রোলগ প্রোগ্রামের একটি গুরুত্বপূর্ণ অংশ, যেগুলি তথ্য সংগ্রহ বা সম্পর্ক প্রতিষ্ঠা করার জন্য ব্যবহৃত হয়। এটি কোডের মধ্যে একটি নির্দিষ্ট পরিস্থিতি বা সম্পর্কের সত্যতা প্রতিস্থাপন করে এবং এর উপর ভিত্তি করে নিয়ম এবং কোয়ারি তৈরি করা হয়।
ফ্যাক্ট সাধারণত প্রেডিকেট এবং অর্গুমেন্ট এর সংমিশ্রণ হয়, যেখানে প্রেডিকেট সম্পর্ক বা কাজ নির্দেশ করে এবং অর্গুমেন্ট সেই সম্পর্কের উপর ভিত্তি করে তথ্য বা মান প্রদান করে।
ফ্যাক্টের সাধারণ গঠন
ফ্যাক্টের সাধারণ গঠন হলো:
প্রেডিকেট(অর্গুমেন্ট1, অর্গুমেন্ট2, ...).এখানে,
- প্রেডিকেট হল একটি সম্পর্ক বা কাজ যা ফ্যাক্ট-এর মূল অংশ।
- অর্গুমেন্ট গুলি হল সেই সম্পর্ক বা কাজের সাথে যুক্ত তথ্য।
ফ্যাক্টের উদাহরণ
সাধারণ সম্পর্ক - পিতা সম্পর্ক (Father relation):
পিতা(অজিজ, রহমান).এখানে,
পিতা/2একটি প্রেডিকেট যা দুইটি আর্গুমেন্ট নেয় এবং বলে যে অজিজ হল রহমান এর পিতা। এটি একটি ফ্যাক্ট (truth statement) যা একটি সম্পর্ককে প্রকাশ করে।অন্য সম্পর্ক - মা সম্পর্ক (Mother relation):
মা(মঞ্জিলা, রুহি).এখানে,
মা/2প্রেডিকেট জানাচ্ছে যে মঞ্জিলা হল রুহি এর মা। এটি একটি ফ্যাক্ট যা সত্য হতে হবে।নাম সম্পর্ক - নাম (Name relation):
নাম(রহমান, মানবিক).এটি বলে যে রহমান এর নাম মানবিক। এটি একটি ফ্যাক্ট যা একটি নাম সম্পর্কিত তথ্য প্রদান করছে।
বয়স সম্পর্ক (Age relation):
বয়স(অজিজ, ৩০).এখানে,
বয়স/2প্রেডিকেট জানাচ্ছে যে অজিজ এর বয়স ৩০। এটি একটি ফ্যাক্ট যা ব্যক্তির বয়সের তথ্য সরবরাহ করছে।বয়স সম্পর্কের মাধ্যমে সম্পর্ক তৈরি:
বয়স(রহমান, ৪৫). বয়স(মা, ৫০).এই ফ্যাক্টগুলি একটি প্রোগ্রাম তৈরি করতে সাহায্য করতে পারে, যেখানে একটি সম্পর্কের ভিত্তিতে বয়স-এর তথ্য প্রতিষ্ঠিত করা হয়।
ফ্যাক্টের ব্যবহার
- তথ্য ধারণ:
প্রোলগে ফ্যাক্ট ব্যবহার করে তথ্য সংগ্রহ এবং সম্পর্ক তৈরি করা হয়। এই তথ্যগুলো পরে নিয়ম এবং কোয়ারি এর মাধ্যমে ব্যবহার করা হতে পারে। কোয়ারি (Query):
প্রোলগে ফ্যাক্ট ব্যবহার করে আপনি বিভিন্ন প্রশ্ন বা কোয়ারি করতে পারেন। যেমন:?- পিতা(অজিজ, X).এটি জানতে চায়, অজিজ এর পিতা কে? যদি উপরের ফ্যাক্ট থাকে, তবে প্রোলগ উত্তর দিবে রহমান।
নিয়ম (Rule):
ফ্যাক্টগুলি ব্যবহার করে আপনি নিয়ম তৈরি করতে পারেন। যেমন:পিতা(X, Y) :- মা(Y, Z), বয়স(Z, ৩০).এই নিয়মটি বলে, যদি Y এর মা Z থাকে এবং Z এর বয়স ৩০ হয়, তবে X হল Y এর পিতা।
সারসংক্ষেপ
ফ্যাক্ট (Fact) হল প্রোলগে একটি মৌলিক উপাদান যা সত্যতা বা সম্পর্ক প্রকাশ করে। এটি প্রেডিকেট এবং অর্গুমেন্ট এর মাধ্যমে তথ্য সরাসরি প্রদান করে এবং প্রোলগের মধ্যে জ্ঞানভিত্তিক সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। ফ্যাক্ট সাধারণত বাস্তব বিশ্বের সম্পর্ক এবং তথ্যকে মডেল করার জন্য ব্যবহৃত হয় এবং এটি নিয়ম (rules) এবং কোয়ারি (queries) তৈরিতে সহায়ক হয়।
নিয়ম (Rules) প্রোলগে একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান, যা শর্ত বা শর্তযুক্ত সম্পর্ক তৈরি করতে ব্যবহৃত হয়। নিয়মের মাধ্যমে আমরা একটি লজিক্যাল স্টেটমেন্ট বা যুক্তিগত সম্পর্ক তৈরি করতে পারি, যা আরও জটিল সমস্যার সমাধান করার জন্য ব্যবহার করা হয়। প্রোলগে নিয়ম তৈরি করতে আমরা সাধারণত :- (colon dash) সিম্বলটি ব্যবহার করি, যা শর্তের মধ্যে সম্পর্ক স্থাপন করে।
প্রোলগে নিয়ম (Rules) এর গঠন:
নিয়ম সাধারণত দুইটি অংশ নিয়ে গঠিত:
- হেড (Head): যে অংশটি শর্ত এবং ফলাফল সরাসরি নির্দেশ করে।
- বডি (Body): শর্ত বা লজিক্যাল সম্পর্ক যা হেডে উল্লেখিত ফলাফল তৈরি করতে সাহায্য করে। যদি বডির শর্তগুলি পূর্ণ হয়, তবে হেডের ফলাফল সত্য হবে।
সাধারণ গঠন:
Head :- Body.এখানে, Head হলো সেই লজিক্যাল স্টেটমেন্ট বা ফলাফল, যা Body এর শর্ত পূর্ণ হলে সত্য হয়।
উদাহরণ ১: সহজ নিয়ম
ধরা যাক, আমরা একটি পিতা-সন্তান সম্পর্ক তৈরি করতে চাই। যদি আমরা জানি যে, অজিজ এর পিতা রহমান এবং রহমান এর পিতা শাওন, তাহলে আমরা নিচের মতো একটি নিয়ম তৈরি করতে পারি:
পিতা(X, Y) :- পিতা(Y, Z).এটি এমনভাবে কাজ করবে:
পিতা(X, Y)যদিপিতা(Y, Z)হয়, তাহলে প্রোলগXএবংYএর মধ্যে সম্পর্ক তৈরি করবে।- সহজভাবে বলতে গেলে,
Xএর পিতা যদিYহয়, এবংYএর পিতা যদিZহয়, তবেXএর পিতার পিতা হবে **Z**।
এখন, যদি আমরা ফ্যাক্টগুলো যোগ করি:
পিতা(অজিজ, রহমান).
পিতা(রহমান, শাওন).এখন, আমরা যদি জানতে চাই:
?- পিতা(অজিজ, X), পিতা(X, Y).এখানে, প্রথমে প্রোলগ অজিজ এর পিতা খুঁজে বের করবে এবং তারপর সেই পিতার পিতা খুঁজে বের করবে।
উত্তর:
X = রহমান,
Y = শাওন.এটি বলে যে, অজিজ এর পিতা রহমান এবং রহমান এর পিতা শাওন।
উদাহরণ ২: কুয়েরি ও নিয়মের মাধ্যমে সম্পর্ক তৈরি
ধরা যাক, আমরা পিতা সম্পর্কের পাশাপাশি মা সম্পর্কও যুক্ত করতে চাই। আমরা দুটি ফ্যাক্ট এবং একটি নিয়ম তৈরি করব:
পিতা(অজিজ, রহমান).
মা(রহমান, নুসরাত).
বাবা_ও_মা(X, Y) :- পিতা(X, Y), মা(X, Y).এটি বলে যে, যদি X এর Y এর পিতা এবং মা উভয়ই হয়, তবে তাদের বাবা এবং মা সম্পর্ক তৈরি হবে।
এখন, যদি আমরা জানতে চাই:
?- বাবা_ও_মা(অজিজ, রহমান).উত্তর হবে:
false.কারণ, অজিজ এর মা হিসেবে নুসরাত উল্লেখ করা হয়নি, ফলে এটি সত্য হবে না।
এভাবে, প্রোলগের নিয়মের মাধ্যমে আমরা আরও জটিল সম্পর্ক তৈরি করতে পারি, যেমন বাবা-মা সম্পর্ক, ভাই-বোন সম্পর্ক, বা অন্য কোনো সম্পর্ক যা শর্তের ভিত্তিতে তৈরি হয়।
উদাহরণ ৩: একাধিক শর্তযুক্ত নিয়ম
এখন, আমরা একটি নিয়ম তৈরি করব যাতে একাধিক শর্তের মধ্যে সম্পর্ক তৈরি করা হবে।
ধরা যাক, আমরা একটি নিয়ম তৈরি করব যা বলে:
"যদি কোনো ব্যক্তি পুরুষ (male) হয় এবং তার পিতা একটি নির্দিষ্ট ব্যক্তি হয়, তবে তাকে ছেলে (son) বলা হবে।"
পুরুষ(রহমান).
পিতা(রহমান, শাওন).
ছেলে(X) :- পুরুষ(X), পিতা(X, Y).এখন, যদি আমরা জানতে চাই:
?- ছেলে(রহমান).এটি উত্তর দেবে:
true.এখানে, প্রোলগ রহমান কে ছেলে বলে চিহ্নিত করেছে কারণ সে পুরুষ এবং তার পিতা শাওন।
সারসংক্ষেপ:
নিয়ম (Rules) প্রোলগে একটি শক্তিশালী উপাদান, যা শর্ত (conditions) এবং ফলাফল (result) এর মধ্যে সম্পর্ক স্থাপন করে। এটি লজিক্যাল স্টেটমেন্ট তৈরি করতে ব্যবহৃত হয় এবং শর্তগুলি পূর্ণ হলে ফলাফল সত্য হয়। প্রোলগের মাধ্যমে আপনি যেকোনো সম্পর্কের ভিত্তিতে বিস্তারিত লজিক তৈরি করতে পারেন যা বিভিন্ন ধরনের প্রশ্নের উত্তর বা ফলাফল নির্ধারণে সহায়ক হয়।
Prolog একটি লজিক্যাল প্রোগ্রামিং ভাষা যেখানে ভেরিয়েবলস (Variables) একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। প্রোলগের ভেরিয়েবলগুলি এমন "প্রতীক" যা প্রোগ্রামে ব্যবহারকারী দ্বারা নির্ধারিত মানগুলিকে ধারণ করে। এই ভেরিয়েবলগুলি লজিক্যাল ইনফারেন্স (logical inference) প্রক্রিয়ায় কাজ করে, যেখানে এগজাম্পল (instantiation) প্রক্রিয়ায় তাদের মান নির্ধারণ করা হয়।
ভেরিয়েবলসের মৌলিক ধারণা:
ভেরিয়েবলগুলি প্রোলগ প্রোগ্রামে অস্থায়ী স্থান হিসেবে কাজ করে, যা কোডের মধ্যে বিভিন্ন ফ্যাক্ট এবং নিয়ম-এর ভিত্তিতে মান ধারণ করে। এটি লজিক্যাল রিজনিং এর জন্য ব্যবহৃত হয় এবং বিভিন্ন ফলস্বরূপে ইনস্ট্যান্টিয়েশন (instantiation) প্রক্রিয়ায় পরিবর্তিত হয়।
প্রোলগে, ভেরিয়েবলগুলি সাধারণত বড় অক্ষর (capital letter) দিয়ে শুরু হয়, যেমন X, Y, **Z**।
ভেরিয়েবলসের কাজ:
- ইনস্ট্যান্টিয়েশন (Instantiation):
প্রোলগে ভেরিয়েবলগুলি ইনস্ট্যান্টিয়েট হয়, যার মানে হলো, যখন একটি কোয়ারি বা নিয়ম কার্যকর করা হয়, তখন ভেরিয়েবলটি নির্দিষ্ট মান বা মানগুলির সাথে সম্পর্কিত হয়। প্রোলগ স্বয়ংক্রিয়ভাবে ভেরিয়েবলগুলির মান নির্ধারণ করে এবং প্রোগ্রামের মাধ্যমে ফলস্বরূপের সাথে সংযুক্ত করে। - ভেরিয়েবল প্রভাব:
প্রোলগের মধ্যে ভেরিয়েবলগুলির প্রভাব হল যে, তারা একটি শর্ত বা সম্পর্কের মধ্যে সংযোগ বা ম্যাপিং তৈরির জন্য কাজ করে। প্রোগ্রাম যখন কোনো ফ্যাক্ট বা নিয়মের সাথে মিলিয়ে ভেরিয়েবলটির মান নির্ধারণ করে, তখন ওই ভেরিয়েবলটির প্রভাব সিস্টেমে প্রচলিত সম্পর্কের মাধ্যমে ছড়িয়ে পড়ে। - বিশ্বস্ততা (Binding):
প্রোলগে, ভেরিয়েবলটি যখন একটি নির্দিষ্ট মানে বন্ধন (binding) হয়, তখন সেটি পরবর্তী কোডে পরিবর্তন হতে পারে না। অর্থাৎ, একবার একটি ভেরিয়েবলকে মান দেওয়ার পর, সেই ভেরিয়েবলটির মান পরবর্তী সময়ে পরিবর্তন করা সম্ভব নয়।
ভেরিয়েবলসের উদাহরণ:
১. বেসিক ভেরিয়েবল ব্যবহার:
পিতা(অজিজ, রহমান).
পিতা(রহমান, সোহেল).এখন যদি আপনি একটি কোয়ারি করেন:
?- পিতা(অজিজ, X).এটি জানতে চায় যে অজিজ এর পিতা কে? এখানে X একটি ভেরিয়েবল যা রহমান এর মানে ব্যাকট্র্যাকিংয়ের মাধ্যমে পরিবর্তিত হবে। ফলস্বরূপ:
X = রহমান.২. একাধিক ভেরিয়েবল ব্যবহার:
পিতা(অজিজ, রহমান).
পিতা(রহমান, সোহেল).এখন, যদি আপনি কোয়ারি করেন:
?- পিতা(অজিজ, X), পিতা(X, Y).এটি প্রশ্ন করবে, অজিজ এর পিতা কে এবং সেই পিতার পিতা কে। এখানে X এবং Y দুটি ভেরিয়েবল। এর ফলস্বরূপ:
X = রহমান,
Y = সোহেল.এখানে X এর মান রহমান এবং Y এর মান সোহেল নির্ধারিত হয়েছে।
৩. ভেরিয়েবলগুলির সীমাবদ্ধতা:
প্রোলগে যদি একটি ভেরিয়েবল একবার মান দিয়ে বেঁধে দেয়া হয়, তাহলে পরবর্তী সময়ে সেই ভেরিয়েবলটি পুনরায় মান পরিবর্তন করতে পারবে না। এর মানে হল, আপনি যদি কোনো ভেরিয়েবলকে নির্দিষ্ট মান দিয়েই তাতে কাজ করতে চান, তবে তার মান পুনরায় ইনস্ট্যান্টিয়েট করা সম্ভব নয়।
পিতা(অজিজ, রহমান).
পিতা(রহমান, সোহেল).
?- পিতা(অজিজ, X), পিতা(X, Y), X = রহমান.এখানে, X কে রহমান মানে বন্ধন করা হচ্ছে, তাই কোয়ারি শেষে:
X = রহমান,
Y = সোহেল.এতে, X পরিবর্তিত হতে পারে না এবং সম্পর্ক সঠিকভাবে মিলিয়ে দেয়।
ভেরিয়েবলসের প্রভাব:
- এগজাম্পল ইনস্ট্যান্স: কোডে ব্যবহৃত ভেরিয়েবলগুলির মান এগজাম্পল ইনস্ট্যান্স হিসাবে নির্ধারিত হয় এবং প্রোগ্রামটির ফলস্বরূপে ভেরিয়েবলটি প্রতিষ্ঠিত হয়।
- ভেরিয়েবলগুলির মধ্যে সম্পর্ক: ভেরিয়েবলগুলি সম্পর্কগুলির মধ্যে যোগসূত্র তৈরি করে এবং একে অপরের সাথে সম্পর্কিত হতে পারে, যা লজিক্যাল ইনফারেন্স প্রক্রিয়ায় সাহায্য করে।
- লজিক্যাল সঠিকতা: ভেরিয়েবলস একটি কোডের লজিক্যাল সঠিকতা নিশ্চিত করতে সাহায্য করে, কারণ এটি নিশ্চিত করে যে নির্দিষ্ট ভেরিয়েবলটি শুধুমাত্র সেই মানের সাথে সম্পর্কিত হবে যেটি প্রোগ্রাম দ্বারা নির্ধারিত হয়েছে।
সারসংক্ষেপ:
প্রোলগের ভেরিয়েবলগুলি লজিক্যাল প্রোগ্রামিংয়ে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলি ইনস্ট্যান্টিয়েট (instantiate) বা বন্ধন (binding) হওয়ার মাধ্যমে প্রোগ্রামের ভিতরে নির্দিষ্ট মান ধারণ করে। ভেরিয়েবলগুলির প্রভাব সিস্টেমে সম্পর্ক গঠন করতে সাহায্য করে, এবং কোডের মধ্যে যুক্তি ভিত্তিক সিদ্ধান্ত গ্রহণের প্রক্রিয়ায় তাদের ব্যবহার গুরুত্বপূর্ণ।
প্রোলগে Complex Facts এবং Rules ব্যবহার করে জটিল সমস্যার সমাধান করা যায়। Complex Facts এবং Rules দিয়ে আপনি বিভিন্ন ধরনের সম্পর্ক গঠন করতে পারেন, এবং সেগুলির মাধ্যমে নির্দিষ্ট সমস্যা সমাধান করতে পারেন। প্রোলগের Complex Facts এবং Rules ব্যবহার করে আপনাকে লজিক্যাল সিদ্ধান্ত এবং ব্যাকট্র্যাকিং কৌশল ব্যবহার করে জটিল সমস্যা সমাধান করতে হয়।
নিচে Complex Facts এবং Rules ব্যবহার করে একটি উদাহরণ দেওয়া হলো, যেখানে বিভিন্ন সম্পর্ক গঠন করে একটি পরিবারের সদস্যদের সম্পর্ক নির্ধারণ করা হয়েছে।
উদাহরণ: পরিবারের সম্পর্ক নির্ধারণ
ধরা যাক, আমাদের একটি পরিবারের তথ্য আছে এবং আমরা চাই যে, এই তথ্যের ভিত্তিতে বিভিন্ন সম্পর্ক যেমন পিতা, মা, ভাই-বোন ইত্যাদি নির্ধারণ করতে।
১. Complex Facts
প্রথমে, আমরা পরিবারের সদস্যদের সম্পর্কের তথ্য ফ্যাক্ট (facts) হিসেবে নির্ধারণ করব।
% ফ্যাক্ট: পরিবার সম্পর্ক
পিতা(অজিজ, রহমান).
পিতা(রহমান, সোহেল).
পিতা(সোহেল, তারেক).
মা(রহমান, সোহেল).
মা(রহমান, সোহেল).
মা(সোহেল, তারেক).এখানে, আমাদের কাছে ৩টি পিতা সম্পর্ক এবং ৩টি মা সম্পর্ক রয়েছে।
- অজিজ পিতা রহমান (অজিজ -> রহমান)
- রহমান পিতা সোহেল (রহমান -> সোহেল)
- রহমান পিতা সোহেল (রহমান -> সোহেল)
- সোহেল পিতা তারেক (সোহেল -> তারেক)
২. Complex Rules
এখন, আমরা কিছু Rules তৈরি করব যা তাদের সম্পর্কের উপর ভিত্তি করে সিদ্ধান্ত নেবে। যেমন, ভাই-বোন সম্পর্ক তৈরি করতে হবে।
% নিয়ম: যদি দুইটি ব্যক্তি পিতা-মাতার সন্তান হয় তবে তারা ভাই-বোন
ভাই_বা_বোন(X, Y) :- পিতা(Z, X), পিতা(Z, Y), X \= Y.
ভাই_বা_বোন(X, Y) :- মা(Z, X), মা(Z, Y), X \= Y.এখানে, আমরা দুটি rule তৈরি করেছি:
- প্রথমটি, যদি দুইটি ব্যক্তি একই পিতার সন্তান হয়, তাহলে তারা ভাই-বোন হবে।
- দ্বিতীয়টি, যদি দুইটি ব্যক্তি একই মায়ের সন্তান হয়, তাহলে তারা ভাই-বোন হবে।
৩. কোয়ারি (Query)
এখন, আমরা প্রোলগ কনসোলে একটি কোয়ারি করতে পারি, যেখানে আমরা জানতে পারি যে রহমান এবং সোহেল ভাই-বোন কিনা।
?- ভাই_বা_বোন(রহমান, সোহেল).এখন, প্রোলগ এই কোয়ারির মাধ্যমে দেখবে যে, রহমান এবং সোহেল একই পিতার সন্তান কিনা এবং তার ভিত্তিতে ফলাফল প্রদর্শন করবে।
৪. আরেকটি উদাহরণ: বড় ভাই বা বোন
ধরা যাক, আমাদের বড় ভাই বা বোন সম্পর্ক তৈরি করতে হবে। যদি একটি ব্যক্তি অন্য ব্যক্তির বড় ভাই বা বোন হয় তবে তার আগের সম্পর্ক এবং সন্তানদের অনুসন্ধান করতে হবে।
% নিয়ম: বড় ভাই বা বোন
বড়_ভাই_বা_বোন(X, Y) :- ভাই_বা_বোন(X, Y), পিতা(Z, X), পিতা(Z, Y), X \= Y, X @> Y.এখানে, আমরা বড় ভাই বা বোন সম্পর্ক তৈরি করেছি, যেখানে:
- X এবং Y ভাই-বোন হতে হবে।
- তবে X যদি Y থেকে বড় হয়, তাহলে তারা বড় ভাই বা বোন হবে।
এখন, এই সম্পর্ক দিয়ে আমরা কোয়ারি করতে পারব, যেমন:
?- বড়_ভাই_বা_বোন(রহমান, সোহেল).এই কোয়ারির মাধ্যমে প্রোলগ দেখবে রহমান কি সোহেল এর বড় ভাই?
সারসংক্ষেপ
Complex Facts এবং Rules ব্যবহার করে প্রোলগে জটিল সম্পর্ক এবং সমস্যার সমাধান করা যায়। উদাহরণস্বরূপ, আমরা পরিবারের সম্পর্কের বিভিন্ন ফ্যাক্ট এবং নিয়ম ব্যবহার করে সম্পর্ক তৈরি করতে পারি এবং তাদের উপর ভিত্তি করে প্রশ্ন বা কোয়ারি করতে পারি। পিতা-মাতার সম্পর্ক, ভাই-বোন সম্পর্ক, বড় ভাই বা বোন সম্পর্ক সহ আরো অনেক ধরনের সম্পর্ক গঠন করা সম্ভব, এবং প্রোলগের ব্যাকট্র্যাকিং এর মাধ্যমে বিভিন্ন সম্ভাব্য সমাধান পরীক্ষা করা যায়।
Read more