Dynamic Knowledge Base (ডাইনামিক জ্ঞানভিত্তিক সিস্টেম) হল একটি সিস্টেম যেখানে জ্ঞান বা তথ্য runtime বা 실행ের সময় পরিবর্তন করা যায়। প্রোলগে ডাইনামিক জ্ঞানভিত্তিক সিস্টেম তৈরি করতে assert/1, retract/1, এবং retractall/1 পেডিকেট ব্যবহার করা হয়। এই পেডিকেটগুলির মাধ্যমে আমরা তথ্য যোগ (assert), মুছতে (retract) এবং পরিবর্তন করতে (retractall) পারি।
ডাইনামিক ফ্যাক্ট (Dynamic Fact)
প্রোলগের সাধারণ ফ্যাক্টগুলো সাধারণত স্থির (static) হয়, অর্থাৎ একবার ডাটাবেসে যোগ হলে তা চলতে থাকা প্রোগ্রামে পরিবর্তন করা যায় না। তবে ডাইনামিক ফ্যাক্টগুলি প্রোগ্রামের চলাকালীন সময়ে যোগ, পরিবর্তন বা মুছে ফেলা সম্ভব। এর জন্য dynamic/1 ডিরেকটিভ ব্যবহৃত হয়।
ডাইনামিক ফ্যাক্ট তৈরি:
dynamic/1 ডিরেকটিভ দিয়ে আমরা একটি ফ্যাক্ট বা নিয়মকে ডাইনামিক হিসেবে চিহ্নিত করতে পারি। একবার এটি ডাইনামিক হিসেবে চিহ্নিত হলে, আমরা runtime এ সেটি assert, retract, বা retractall এর মাধ্যমে পরিবর্তন করতে পারি।
ডাইনামিক ফ্যাক্ট ডিফাইন করা:
:- dynamic পিতা/2.এটি পিতা/2 নামক সম্পর্ককে ডাইনামিক হিসেবে চিহ্নিত করে, যাতে আমরা এটি runtime এ পরিবর্তন বা মুছে ফেলতে পারি।
1. Assert/1 - নতুন তথ্য যোগ করা
assert/1 পেডিকেটটি ডাইনামিক ফ্যাক্টে নতুন তথ্য যোগ করার জন্য ব্যবহৃত হয়। এটি একটি ফ্যাক্ট বা নিয়মকে ডাইনামিকভাবে জ্ঞানের বেসে যুক্ত করে।
ব্যবহার:
assert(পিতা(অজিজ, রহমান)).উদাহরণ:
:- dynamic পিতা/2.
% নতুন তথ্য যোগ
assert(পিতা(অজিজ, রহমান)).
% যাচাই
?- পিতা(অজিজ, X).
X = রহমান.এখানে, assert/1 পেডিকেটটি পিতা(অজিজ, রহমান) ফ্যাক্টটি ডাইনামিক জ্ঞানভিত্তিক সিস্টেমে যুক্ত করেছে এবং তারপর আমরা পিতা(অজিজ, X) কোয়ারি চালিয়ে X = রহমান ফলাফল পাই।
2. Retract/1 - তথ্য মুছে ফেলা
retract/1 পেডিকেটটি ডাইনামিক ফ্যাক্ট থেকে তথ্য মুছে ফেলার জন্য ব্যবহৃত হয়। এটি নির্দিষ্ট কোনো তথ্য বা ফ্যাক্ট মুছে দেয়, তবে এটা শুধুমাত্র ডাইনামিক ফ্যাক্ট এর ক্ষেত্রেই কাজ করে।
ব্যবহার:
retract(পিতা(অজিজ, রহমান)).উদাহরণ:
:- dynamic পিতা/2.
% নতুন তথ্য যোগ
assert(পিতা(অজিজ, রহমান)).
% তথ্য মুছে ফেলা
retract(পিতা(অজিজ, রহমান)).
% যাচাই
?- পিতা(অজিজ, X).
false.এখানে, retract/1 পেডিকেটটি পিতা(অজিজ, রহমান) ফ্যাক্টটি মুছে দিয়েছে, এবং যখন কোয়ারি পিতা(অজিজ, X) চালানো হয়েছে, তখন false ফিরে এসেছে কারণ পিতা(অজিজ, রহমান) এখন আর ডাইনামিক ফ্যাক্টে নেই।
3. Retractall/1 - সমস্ত তথ্য মুছে ফেলা
retractall/1 পেডিকেটটি একটি নির্দিষ্ট সম্পর্ক বা ফ্যাক্টের সমস্ত ইনস্ট্যান্স (instances) মুছে ফেলার জন্য ব্যবহৃত হয়।
ব্যবহার:
retractall(পিতা(_, _)).এটি পিতা/2 সম্পর্কের সমস্ত তথ্য মুছে ফেলবে, এমনকি যদি তার মধ্যে একাধিক ইনস্ট্যান্স থাকে।
উদাহরণ:
:- dynamic পিতা/2.
% তথ্য যোগ
assert(পিতা(অজিজ, রহমান)).
assert(পিতা(রহমান, শাওন)).
% সমস্ত তথ্য মুছে ফেলা
retractall(পিতা(_, _)).
% যাচাই
?- পিতা(X, Y).
false.এখানে, retractall/1 পেডিকেটটি পিতা/2 সম্পর্কের সমস্ত তথ্য মুছে ফেলেছে, এবং পিতা(X, Y) কোয়ারি চালানোর পর false এসেছে কারণ পিতা/2 সম্পর্কের আর কোনো তথ্য নেই।
4. Dynamic Knowledge Base এর উদাহরণ
:- dynamic পিতা/2.
% পিতা সম্পর্কের তথ্য যোগ করা
assert(পিতা(অজিজ, রহমান)).
assert(পিতা(রহমান, শাওন)).
% তথ্য বের করা
প্রাপ্তি(X) :- পিতা(X, Y), write(Y), nl.এখানে, পিতা/2 সম্পর্কটি ডাইনামিক হিসেবে চিহ্নিত করা হয়েছে। যখন assert/1 ব্যবহার করে নতুন তথ্য যোগ করা হয়, তখন প্রাপ্তি/1 শর্ত অনুযায়ী পিতা/2 সম্পর্কের সব তথ্য প্রিন্ট হবে।
কোয়ারি:
?- প্রাপ্তি(পিতা(অজিজ, X)).এটি সমস্ত পিতা সম্পর্কের তথ্য দেখাবে।
সারসংক্ষেপ:
প্রোলগে Dynamic Knowledge Base তৈরি করতে assert/1, retract/1, এবং retractall/1 পেডিকেট ব্যবহার করা হয়। assert/1 পেডিকেটটি নতুন তথ্য যোগ করার জন্য, retract/1 পেডিকেটটি একটি নির্দিষ্ট তথ্য মুছে ফেলার জন্য, এবং retractall/1 পেডিকেটটি সমস্ত সম্পর্কের তথ্য মুছে ফেলার জন্য ব্যবহৃত হয়। dynamic/1 ডিরেকটিভ ব্যবহার করে কোনো ফ্যাক্ট বা সম্পর্ককে ডাইনামিক হিসেবে চিহ্নিত করা হয়, যা runtime এ পরিবর্তনযোগ্য হয়।
Read more