প্রোলগ (Prolog) একটি লজিক্যাল প্রোগ্রামিং ভাষা, যা ডিক্লারেটিভ পদ্ধতিতে কাজ করে। এর মাধ্যমে ব্যবহারকারী ফ্যাক্ট (facts), নিয়ম (rules), এবং কোয়ারি (queries) ব্যবহার করে লজিক্যাল সিদ্ধান্ত নেয়। প্রোলগে সিনট্যাক্স বেশ সোজা এবং এর প্রধান উপাদানগুলো নিম্নরূপ:
১. ফ্যাক্ট (Fact)
ফ্যাক্ট হল একটি মৌলিক তথ্যের বিবৃতি যা সিস্টেমের মধ্যে সত্য হিসেবে গৃহীত হয়। এটি একটি স্টেটমেন্ট যা কোনো সম্পর্ক বা তথ্য প্রকাশ করে।
ফ্যাক্টের সিনট্যাক্স:
relation_name(argument1, argument2, ...).উদাহরণ:
পিতা(অজিজ, রহমান).এটি জানাচ্ছে যে অজিজ পিতা রহমান।
এখানে:
- পিতা হল সম্পর্ক (predicate),
- অজিজ এবং রহমান হল আর্গুমেন্ট (arguments)।
২. নিয়ম (Rule)
নিয়ম এমন একটি শর্তযুক্ত বিবৃতি, যা প্রমাণ করতে সাহায্য করে যে কিছু সম্পর্ক বা তথ্য কীভাবে সত্য হতে পারে। নিয়ম সাধারণত :- সিম্বল দ্বারা সংজ্ঞায়িত হয়, যা "যদি" (if) এর মতো কাজ করে।
নিয়মের সিনট্যাক্স:
head :- body.- head: নিয়মের মূল অংশ (যা প্রমাণ করতে হবে)।
- body: শর্ত বা পরিস্থিতি যা মূল অংশের জন্য সত্য হতে হবে।
উদাহরণ:
পিতা(X, Y) :- পিতা(Y, Z).এটি বলে যে, X যদি Y এর পিতা হয়, তবে Y এর পিতা Z হবে।
এখানে:
- পিতা(X, Y) হল head।
- পিতা(Y, Z) হল body।
৩. কোয়ারি (Query)
কোয়ারি হল একটি প্রশ্ন যা প্রোলগের কাছে কোনো তথ্য বা সম্পর্ক জানতে চায়। প্রোলগ এই প্রশ্নের উত্তরে সত্য (true) বা মিথ্যা (false) উত্তর প্রদান করে। কোয়ারি শুরু হয় ?- দিয়ে।
কোয়ারির সিনট্যাক্স:
?- relation_name(argument1, argument2, ...).উদাহরণ:
?- পিতা(অজিজ, X).এটি জানতে চায় যে অজিজ এর পিতা কে? প্রোলগ এই কোয়ারির জন্য প্রাসঙ্গিক তথ্য খুঁজে বের করবে।
৪. ভেরিয়েবল (Variable)
প্রোলগে ভেরিয়েবলগুলি সাধারণত বড় অক্ষর দিয়ে শুরু হয়, যেমন X, Y, Z ইত্যাদি।
ভেরিয়েবলের সিনট্যাক্স:
relation_name(X, Y).উদাহরণ:
পিতা(X, রহমান).এটি বলে যে রহমান এর পিতা কে, এবং X এর মান হবে যেটি রহমান এর পিতা।
৫. লজিক্যাল অপারেটর (Logical Operators)
প্রোলগে লজিক্যাল অপারেটরগুলি , (comma) এবং ; (semicolon) এর মাধ্যমে ব্যবহৃত হয়:
, (comma): এটি AND অপারেটর হিসেবে কাজ করে। এটি দুটি শর্তের মধ্যে যদি উভয়ই সত্য হয় তবেই শর্তটি পূর্ণ হয়।; (semicolon): এটি OR অপারেটর হিসেবে কাজ করে, যেখানে যদি কোনো একটি শর্ত সত্য হয় তবেই পুরো নিয়মটি সত্য হবে।
লজিক্যাল অপারেটরের উদাহরণ:
পিতা(X, Y) :- পিতা(Y, Z), পিতা(Z, A).এটি বলে যে, X যদি Y এর পিতা হয় এবং Y যদি Z এর পিতা হয়, তবে X এর পিতা A হবে। এখানে , (comma) ব্যবহার করা হয়েছে।
পিতা(X, Y) :- X = অজিজ; X = রহমান.এটি বলে যে, X যদি অজিজ অথবা রহমান হয়, তবে X এর পিতা Y হবে। এখানে ; (semicolon) ব্যবহার করা হয়েছে।
৬. কনসালিডেশন এবং ডিসজাংশন
কনসালিডেশন (Conjunction): একাধিক শর্ত যদি একসঙ্গে সত্য হতে হয়।
সিংহ(X) :- বাঘ(X), বন্যপ্রাণী(X).এখানে, X যদি বাঘ এবং বন্যপ্রাণী হয় তবে তাকে সিংহ বলা হবে।
ডিসজাংশন (Disjunction): একাধিক শর্তের মধ্যে যে কোন একটি শর্ত সত্য হলেই পুরো নিয়মটি সত্য হবে।
সিংহ(X) :- বাঘ(X); পিতা(X, Y).এখানে, X যদি বাঘ হয় অথবা X যদি পিতা হয়, তবে তাকে সিংহ বলা হবে।
৭. কোমেন্ট (Comment)
প্রোলগে কমেন্ট লেখা যায় /* এবং */ দিয়ে, অথবা % দিয়ে একক লাইনের কমেন্ট দেওয়া যায়।
কমেন্টের উদাহরণ:
% এটি একটি একক লাইন কমেন্ট।/* এটি একটি
মাল্টি-লাইন কমেন্ট */সারসংক্ষেপ
প্রোলগের বেসিক সিনট্যাক্স মূলত ফ্যাক্ট, নিয়ম, কোয়ারি, এবং ভেরিয়েবল এর উপর ভিত্তি করে গঠিত। প্রোলগের কোড লেখার সময় লজিক্যাল অপারেটর (যেমন , এবং ;), কনসালিডেশন এবং ডিসজাংশন এর মাধ্যমে সম্পর্ক এবং সিদ্ধান্ত তৈরি করা হয়। প্রোলগের এই সহজ এবং শক্তিশালী সিনট্যাক্সের মাধ্যমে ব্যবহারকারীরা খুব সহজেই জ্ঞানভিত্তিক সিস্টেম এবং লজিক্যাল প্রোগ্রাম তৈরি করতে পারেন।
প্রোলগে প্রেডিকেটস (Predicates) এবং এটমস (Atoms) দুটি মৌলিক এবং গুরুত্বপূর্ণ ধারণা। এগুলি প্রোলগ প্রোগ্রামিং ভাষায় লজিক্যাল সম্পর্ক এবং তথ্য প্রকাশ করার জন্য ব্যবহৃত হয়। প্রতিটি প্রোগ্রাম কোডে এই ধারণাগুলি ব্যবহার করা হয় ফ্যাক্ট, নিয়ম, এবং কোয়ারি তৈরি করতে।
১. প্রেডিকেট (Predicate):
প্রেডিকেট হলো প্রোলগের একটি গুরুত্বপূর্ণ ধারণা, যা একটি সম্পর্ক বা সত্যতা প্রকাশ করে। এটি একটি ফাংশনের মতো কাজ করে যা একটি বা একাধিক অর্গুমেন্ট গ্রহণ করে এবং একটি লজিক্যাল সম্পর্ক প্রতিষ্ঠিত করে।
- প্রেডিকেটের ব্যবহার: প্রেডিকেট ব্যবহার করে আপনি সম্পর্ক বা কাজের বিবৃতি তৈরি করতে পারেন। এটি ফ্যাক্ট বা নিয়ম হিসেবে ব্যবহৃত হতে পারে এবং তথ্য বা সমস্যা সমাধানে সিদ্ধান্ত গ্রহণের জন্য ব্যবহৃত হয়।
প্রেডিকেটের উদাহরণ:
পিতা সম্পর্ক (Father relation):
পিতা(অজিজ, রহমান).এখানে,
পিতা/2একটি প্রেডিকেট যা দুইটি আর্গুমেন্ট গ্রহণ করছে এবং এই বিবৃতিটি বলে যে অজিজ হল রহমান এর পিতা। এটি একটি ফ্যাক্ট (fact) হিসেবে কাজ করছে।নিয়ম (Rule):
পিতা(X, Y) :- পিতা(Y, Z).এখানে,
পিতা/2প্রেডিকেটের মাধ্যমে একটি সম্পর্ক তৈরি করা হয়েছে যা Y কে Z এর পিতা হতে বলে, যদি X এর পিতা Y হয়। এটি একটি নিয়ম (rule) হিসেবে কাজ করছে।
প্রেডিকেট সাধারণত নাম এবং অর্গুমেন্ট দ্বারা গঠিত হয়। প্রেডিকেটের নাম সাধারণত লেটার বা ক্যাপিটাল অক্ষর দ্বারা শুরু হয়।
২. এটম (Atom):
এটম হলো একটি মৌলিক প্রোলগ উপাদান, যা সাধারণত স্থির মান (constant value) বা নাম হিসেবে কাজ করে। এটম প্রোলগের একটি স্ট্রিং যা কোনো মান বা আইটেমকে প্রতিনিধিত্ব করে। এটম প্রায়শই লজিক্যাল তথ্য বা রিলেশনশিপ সম্পর্কিত তথ্য বোঝাতে ব্যবহৃত হয়।
এটমের বৈশিষ্ট্য:
- এটম সাধারণত একক শব্দ (single word) বা স্ট্রিং হয় এবং ছোট অক্ষরে লেখা হয়।
- এটমের মধ্যে কোনো স্পেস, সংখ্যার মতো চরিত্র থাকতে পারে না (তবে এটম যদি কয়েকটি শব্দের সমন্বয়ে গঠিত হয়, তবে এটিকে কোডে সঠিকভাবে কোটেশনে (quotes) রাখতে হয়)।
এটমের উদাহরণ:
এটম হিসাবে একটি নাম:
সোহেল.এখানে
সোহেলএকটি এটম যা একটি নির্দিষ্ট ব্যক্তির নাম হতে পারে।এটম হিসাবে একটি সম্পর্ক:
পিতা.এখানে
পিতাএকটি এটম যা সম্পর্ক বা কাজ নির্দেশ করে। এটি প্রোলগে প্রেডিকেট হিসেবে ব্যবহৃত হতে পারে।এটমের কোটেশন ব্যবহার:
'এটি একটি এটম'.এখানে এটমটি দুটি শব্দের সমন্বয়ে গঠিত, এবং কোটেশন চিহ্ন দ্বারা এটিকে একটি একক এটম হিসেবে ব্যবহার করা হয়েছে।
প্রেডিকেট এবং এটমের মধ্যে পার্থক্য:
| বৈশিষ্ট্য | প্রেডিকেট (Predicate) | এটম (Atom) |
|---|---|---|
| ব্যবহার | লজিক্যাল সম্পর্ক তৈরি করতে, যেমন ফ্যাক্ট বা নিয়ম। | একটি নির্দিষ্ট মান বা তথ্যকে প্রতিনিধিত্ব করতে। |
| আর্গুমেন্ট | এক বা একাধিক আর্গুমেন্ট নিতে পারে। | কোনো আর্গুমেন্ট গ্রহণ করে না। |
| স্ট্রাকচার | প্রেডিকেট নাম এবং আর্গুমেন্ট নিয়ে গঠিত। | একক শব্দ বা স্ট্রিং। |
| নাম | সাধারণত ছোট অক্ষরে লেখা হয়। | সাধারণত ছোট অক্ষরে লেখা হয়, তবে কোডে স্পেস থাকলে কোটেশনে ব্যবহার হয়। |
| উদাহরণ | পিতা(অজিজ, রহমান) | সোহেল |
সারসংক্ষেপ:
- প্রেডিকেট হল এমন একটি ফাংশন বা সম্পর্ক যা একটি বা একাধিক আর্গুমেন্ট গ্রহণ করে এবং তা দিয়ে কোনো লজিক্যাল সম্পর্ক তৈরি করে। এটি প্রোলগের মূল ধারণাগুলোর মধ্যে একটি এবং ফ্যাক্ট বা নিয়ম তৈরির জন্য ব্যবহৃত হয়।
- এটম হল একটি মৌলিক মান বা নাম যা কোনো নির্দিষ্ট বস্তু বা তথ্য বোঝায়। এটম সাধারণত ছোট অক্ষরে লেখা হয় এবং কোডে স্ট্রিং বা নামের মতো কাজ করে।
প্রোলগ একটি লজিক্যাল প্রোগ্রামিং ভাষা, এবং এটি ডিক্লারেটিভ পদ্ধতিতে কাজ করে। এখানে প্রোগ্রামাররা মূলত ফ্যাক্ট (facts) এবং নিয়ম (rules) দিয়ে সমস্যা সমাধান করেন। প্রোলগে, ভেরিয়েবলস (Variables) এমন একটি গুরুত্বপূর্ণ উপাদান, যা সম্পর্কিত তথ্য বা ফ্যাক্ট এবং নিয়মগুলোর মধ্যে অনির্ধারিত (unknown) বা পরিবর্তনশীল মানের প্রতিনিধিত্ব করে। প্রোলগে ভেরিয়েবলসকে একটি নির্দিষ্ট অর্থে ব্যবহার করা হয়।
প্রোলগে ভেরিয়েবলস এর ডিক্লারেশন:
প্রোলগে ভেরিয়েবলস সাধারণত বড় হাতের অক্ষর দিয়ে শুরু হয়। অর্থাৎ, প্রোলগে যে কোনো ভেরিয়েবল নামের প্রথম অক্ষরটি যদি বড় হাতের হয়, তাহলে সেটি ভেরিয়েবল হিসেবে গণ্য হবে। উদাহরণস্বরূপ, X, Y, Person ইত্যাদি ভেরিয়েবলস হিসেবে ব্যবহার করা হয়।
ভেরিয়েবল ডিক্লারেশনের উদাহরণ:
পিতা(অজিজ, রহমান).
পিতা(রহমান, শাওন).এখানে, অজিজ, রহমান, এবং শাওন হল ফ্যাক্ট, কিন্তু X বা Y ভেরিয়েবল হিসেবে ব্যবহার করা যাবে, যেমন:
পিতা(X, Y).এখানে X এবং Y ভেরিয়েবল, এবং তাদের মান ডাটা বা সম্পর্কের ভিত্তিতে প্রোলগ খুঁজে বের করবে।
প্রোলগে ভেরিয়েবলস এর ব্যবহার:
প্রোলগে ভেরিয়েবলস মূলত ডেটার খোঁজ বা সংশ্লিষ্ট সম্পর্ক বের করার জন্য ব্যবহৃত হয়। যখন কোনো ফ্যাক্ট বা নিয়ম ব্যবহার করা হয় এবং সেগুলির মধ্যে অনির্ধারিত মান থাকে, তখন প্রোলগ ওই মান খুঁজে বের করার জন্য ভেরিয়েবল ব্যবহার করে।
উদাহরণ ১: ভেরিয়েবল ব্যবহার
ধরা যাক, আপনার কাছে দুটি ফ্যাক্ট আছে:
পিতা(অজিজ, রহমান).
পিতা(রহমান, শাওন).এখন, আপনি যদি জানতে চান, "রহমানের পিতা কে?", তবে আপনি নিচের কোয়ারিটি চালাতে পারেন:
?- পিতা(X, রহমান).এখানে, X একটি ভেরিয়েবল, এবং প্রোলগ এটি খুঁজে বের করবে যে, রহমান এর পিতা কে। এর আউটপুট হবে:
X = অজিজ.অর্থাৎ, রহমানের পিতা হলো অজিজ।
উদাহরণ ২: একাধিক ভেরিয়েবল ব্যবহার
যদি আপনি জানতে চান, "অজিজের পিতা কে?", তাহলে আপনি নিচের কোয়ারিটি চালাতে পারেন:
?- পিতা(অজিজ, Y).এখানে Y একটি ভেরিয়েবল, এবং প্রোলগ এটি খুঁজে বের করবে যে, অজিজ এর পিতা কে। আউটপুট হবে:
Y = রহমান.অর্থাৎ, অজিজের পিতা হলো রহমান।
উদাহরণ ৩: নিয়মে ভেরিয়েবল ব্যবহার
ধরা যাক, আপনি একটি নিয়ম তৈরি করেছেন, যা বলে:
পিতা(X, Y) :- পিতা(Y, Z).এটি বলে যে, X এর পিতা Y হলে, তখন Y এর পিতা Z। এই নিয়মের মাধ্যমে আপনি পিতা সম্পর্কের আরও গভীর অনুসন্ধান করতে পারেন।
উদাহরণস্বরূপ, আপনি যদি জানতে চান, "অজিজের পিতার পিতা কে?", তাহলে আপনি কোয়ারি করতে পারেন:
?- পিতা(অজিজ, X), পিতা(X, Y).এখানে X এবং Y দুটি ভেরিয়েবল, এবং প্রোলগ এটি খুঁজে বের করবে। এর আউটপুট হবে:
X = রহমান,
Y = শাওন.অর্থাৎ, অজিজের পিতার পিতা হলো শাওন।
প্রোলগে ভেরিয়েবলস এর কিছু গুরুত্বপূর্ণ বিষয়:
- ভেরিয়েবল এর সীমা:
প্রোলগের মধ্যে ভেরিয়েবল যতক্ষণ না একটি ফ্যাক্ট বা নিয়ম দিয়ে পূর্ণ হয়, ততক্ষণ পর্যন্ত এটি অনির্ধারিত (unknown) থাকে। - একক ভেরিয়েবলস:
প্রোলগে প্রতিটি ভেরিয়েবলকে আলাদা এবং নির্দিষ্ট একটি মান হিসেবে গণ্য করা হয়। যখন একটি ভেরিয়েবল কোনও মান নেয়, এটি ওই মানের জন্য নির্দিষ্ট হয়ে যায়। - ভেরিয়েবল ম্যাচিং:
প্রোলগে, যখন একটি কোয়ারি চালানো হয়, তখন প্রতিটি ভেরিয়েবল ফ্যাক্ট বা নিয়ম এর সাথে ম্যাচ (match) করা হয়, এবং সম্ভাব্য মান বের করা হয়।
সারসংক্ষেপ:
প্রোলগে ভেরিয়েবল এমন একটি উপাদান, যা অজানা বা অনির্ধারিত মান প্রতিনিধিত্ব করে। প্রোলগে ভেরিয়েবলস বড় হাতের অক্ষর দিয়ে শুরু হয় (যেমন, X, Y, Person ইত্যাদি)। এটি ফ্যাক্ট বা নিয়ম থেকে তথ্য বের করার জন্য ব্যবহৃত হয় এবং ম্যাচিং প্রক্রিয়ার মাধ্যমে প্রোলগ সেই মানের উপর ভিত্তি করে ফলাফল প্রদান করে।
Prolog হল একটি লজিক্যাল প্রোগ্রামিং ভাষা, যা ডিক্লারেটিভ পদ্ধতি অনুসরণ করে। এটি মূলত ফ্যাক্ট (Facts), নিয়ম (Rules), এবং কোয়ারি (Queries) এর মাধ্যমে কাজ করে। নিচে এই তিনটি উপাদান বিস্তারিতভাবে আলোচনা করা হল:
১. ফ্যাক্ট (Facts)
ফ্যাক্ট হল এমন তথ্য বা সম্পর্ক যা সত্য হিসাবে বিবেচিত হয় এবং এটি নির্দিষ্টভাবে জানানো হয়। প্রোলগে, ফ্যাক্ট সাধারণত এটি সত্য, বা এটি সম্পর্কযুক্ত বলে উল্লেখ করা হয়। ফ্যাক্টগুলি ডাটাবেসের মতো কাজ করে এবং সেগুলি কোন শর্ত বা সিদ্ধান্ত গ্রহণের জন্য প্রয়োজনীয় তথ্য সরবরাহ করে।
ফ্যাক্টের উদাহরণ:
পিতা(অজিজ, রহমান).এটি বলে যে অজিজ পিতা রহমান। এখানে, আমরা একটি সম্পর্ক প্রকাশ করছি (অজিজ পিতা রহমান), যা ফ্যাক্ট হিসেবে ব্যবহৃত হচ্ছে।
আরেকটি উদাহরণ:
প্রধানমন্ত্রী(বাংলাদেশ, শেখ হাসিনা).এটি বলে যে বাংলাদেশ এর প্রধানমন্ত্রী শেখ হাসিনা।
ফ্যাক্টগুলি কখনও পরিবর্তন হয় না এবং তারা প্রোগ্রামটির উপাদান হিসেবে ব্যবহৃত হয়।
২. নিয়ম (Rules)
নিয়ম এমন একটি শর্তযুক্ত বিবৃতি যা একটি শর্ত পূর্ণ হলে একটি ফলস্বরূপ তৈরি করে। প্রোলগে, নিয়ম গঠন করা হয় :- চিহ্ন ব্যবহার করে, যেখানে শর্ত আগে এবং ফলস্বরূপ পরে লেখা হয়। নিয়ম ব্যবহারকারীর প্রয়োজন অনুসারে যুক্তি তৈরি করতে এবং সম্পর্ক প্রতিষ্ঠা করতে সাহায্য করে।
নিয়মের উদাহরণ:
পিতা(X, Y) :- পিতা(Y, Z).এটি বলে যে, যদি Y এর পিতা Z হয়, তবে X এর পিতা Y হবে। এখানে, :- চিহ্নটি বলে যে X, Y, Z সম্পর্কিত একটি শর্তপূর্ণ বিবৃতি রয়েছে।
আরেকটি উদাহরণ:
সাবধান(X) :- মন্ত্রী(X), অগণতান্ত্রিক(X).এটি বলে যে, যদি X মন্ত্রী হয় এবং X অগণতান্ত্রিক হয়, তবে X সাবধান (ঝুঁকিপূর্ণ) হতে পারে।
নিয়মগুলি প্রোগ্রামের মধ্যে সম্পর্ক তৈরি এবং সিদ্ধান্ত গ্রহণ করতে সহায়ক।
৩. কোয়ারি (Queries)
কোয়ারি হল একটি প্রশ্ন যা প্রোলগ কনসোল থেকে করা হয় এবং এর মাধ্যমে আপনি কোডের মধ্যে যে তথ্য এবং সম্পর্ক রয়েছে তা খুঁজে বের করেন। কোয়ারি আপনাকে আপনার প্রোগ্রাম থেকে ফলাফল বের করতে সাহায্য করে এবং এটি সাধারণত ?- দিয়ে শুরু হয়।
কোয়ারির উদাহরণ:
?- পিতা(অজিজ, X).এটি জানতে চায়, অজিজ এর পিতা কে? প্রোলগ সিস্টেম তার সমস্ত তথ্য এবং নিয়মের ভিত্তিতে উত্তর দেয়। এই ক্ষেত্রে, X হবে রহমান।
আরেকটি উদাহরণ:
?- প্রধানমন্ত্রী(বাংলাদেশ, X).এটি জানতে চায়, বাংলাদেশ এর প্রধানমন্ত্রী কে? প্রোলগ এর উত্তর দেবে, X = শেখ হাসিনা।
কোয়ারি ব্যবহার করে প্রোলগ সিস্টেমের মধ্যে বিদ্যমান সম্পর্কের উত্তর পাওয়া যায়।
ফ্যাক্ট, নিয়ম, এবং কোয়ারি এর মধ্যে সম্পর্ক
- ফ্যাক্ট হল মৌলিক তথ্য যা আপনি জানেন এবং প্রোগ্রামটিতে সরাসরি সত্য হিসাবে সঞ্চিত থাকে।
- নিয়ম হল শর্তযুক্ত বিবৃতি যা কিছু তথ্যের ভিত্তিতে নতুন সম্পর্ক বা সিদ্ধান্ত তৈরি করে।
- কোয়ারি হল প্রশ্ন যা আপনি সিস্টেম থেকে উত্তর পেতে করেন, এবং এটি প্রোলগের ফ্যাক্ট এবং নিয়মগুলির উপর ভিত্তি করে সঠিক তথ্য প্রদান করে।
এদের মাধ্যমে প্রোলগ সিস্টেম লজিক্যাল ইনফারেন্স বা যুক্তির মাধ্যমে সঠিক ফলাফল বের করতে সক্ষম হয়।
উদাহরণ:
ধরা যাক, আমাদের কাছে নিম্নলিখিত ফ্যাক্ট এবং নিয়ম রয়েছে:
পিতা(অজিজ, রহমান).
পিতা(রহমান, সোহেল).
পিতা(সোহেল, তারেক).
পিতা(X, Y) :- পিতা(Y, Z).এখন, যদি আপনি কোয়ারি করেন:
?- পিতা(অজিজ, X).প্রোলগ এর উত্তর দেবে:
X = রহমান.আরেকটি কোয়ারি:
?- পিতা(রহমান, X).প্রোলগ এর উত্তর দেবে:
X = সোহেল.এটি প্রোলগের মধ্যে ফ্যাক্ট, নিয়ম, এবং কোয়ারির কাজ করার একটি বাস্তব উদাহরণ।
সারসংক্ষেপ
ফ্যাক্ট (Facts) হল প্রোগ্রামের মধ্যে সরাসরি সত্য তথ্য বা সম্পর্ক, নিয়ম (Rules) হল শর্তপূর্ণ সিদ্ধান্ত যা সম্পর্ক তৈরি করতে সাহায্য করে, এবং কোয়ারি (Queries) হল প্রশ্ন যা প্রোলগ কনসোল থেকে ফলাফল পেতে করা হয়। প্রোলগ সিস্টেমে এই তিনটি উপাদান একসঙ্গে কাজ করে, যেখানে ফ্যাক্ট এবং নিয়ম তথ্য এবং সম্পর্ক প্রদান করে, এবং কোয়ারি সেই তথ্যের ওপর ভিত্তি করে ফলাফল প্রদান করে।
প্রোলগ একটি লজিক্যাল প্রোগ্রামিং ভাষা, যা লজিকাল সম্পর্ক, সিদ্ধান্ত গ্রহণ, এবং টার্ম কনস্ট্রাকশন এর মাধ্যমে সমস্যা সমাধান করে। প্রোলগে ব্যবহৃত অপারেটর এবং টার্ম কনস্ট্রাকশন এর মাধ্যমে তথ্যের সম্পর্ক তৈরি করা হয়, এবং এর মাধ্যমে কোডের কার্যকারিতা এবং লজিক্যাল সিদ্ধান্ত তৈরি করা হয়।
প্রোলগে সাধারণত যে সমস্ত অপারেটর ব্যবহৃত হয় তা নিম্নে দেওয়া হল:
১. প্রোলগের বেসিক অপারেটর:
:-(নিয়ম অপারেটর):
এই অপারেটরটি প্রোলগে নিয়ম বা শর্তযুক্ত সম্পর্ক নির্দেশ করতে ব্যবহৃত হয়। এটি একটি যদি-তাহলে সম্পর্ক নির্ধারণ করে। সাধারণভাবে, এটি প্রতিস্থাপন (substitution) বা ইনফারেন্স এর জন্য ব্যবহৃত হয়।উদাহরণ:
পিতা(X, Y) :- পিতা(Y, Z).এটি বলে যে, X যদি Y এর পিতা হয়, তবে Y এর পিতা Z হবে।
, (কমা)(কনজাংশ বা এবং অপারেটর):
কমা অপারেটর দুটি শর্তের মধ্যে লজিক্যাল AND এর মতো কাজ করে। এটি যখন দুইটি শর্ত একসাথে প্রযোজ্য হয়, তখন দুটি শর্তকে একত্রে পরীক্ষা করে।উদাহরণ:
পিতা(X, Y), মা(Y, Z).এখানে, প্রথমে X এর পিতা Y হতে হবে এবং তারপর Y এর মা Z হতে হবে।
; (সেমিকোলন)(ডিসজাংশ বা অথবা অপারেটর):
সেমিকোলন অপারেটর দুটি শর্তের মধ্যে লজিক্যাল OR এর মতো কাজ করে। এটি যখন দুইটি শর্তের মধ্যে একটিও সত্য হয়, তখন পুরো এক্সপ্রেশনটি সত্য হবে।উদাহরণ:
পিতা(X, Y); মা(X, Y).এখানে, X যদি Y এর পিতা হয় অথবা X যদি Y এর মা হয়, তবে শর্তটি সত্য হবে।
/ (ডিভাইড বা কলন অপারেটর):
এই অপারেটরটি লিস্ট বা অ্যাট্রিবিউট কে বিভক্ত করতে ব্যবহৃত হয়। প্রোলগে এটি একটি পদ্ধতির নাম এবং আর্গুমেন্ট বিভক্ত করার জন্য ব্যবহৃত হয়।উদাহরণ:
পিতা(অজিজ, রহমান).এখানে,
পিতাহচ্ছে পদ্ধতি এবং(অজিজ, রহমান)হল আর্গুমেন্ট।= (ইকুয়াল অপারেটর):
এটি দুইটি টার্মের মধ্যে ইকুয়ালিটি পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি চেক করে যে দুটি টার্ম একে অপরের সমান কি না।উদাহরণ:
X = Y.\= (নট ইকুয়াল অপারেটর):
এটি পরীক্ষা করে যে দুটি টার্ম সমান নয় কি না। যদি টার্ম দুটি সমান না হয়, তবে এটি সত্য হবে।উদাহরণ:
X \= Y.
২. টার্ম কনস্ট্রাকশন (Term Construction):
প্রোলগে টার্ম হল মৌলিক ডেটা ইউনিট যা বিভিন্ন প্রকারের হতে পারে। এটি সাধারণত ফ্যাক্ট, নিয়ম, ভেরিয়েবল, এবং লিস্ট এর মাধ্যমে গঠন করা হয়।
অ্যাটম (Atom):
একটি অ্যাটম সাধারণত একটি স্ট্রিং যা একটি ইউনিক আইডেন্টিফায়ার হিসেবে কাজ করে। এটি সাধারণত ছোট হাতের অক্ষর দিয়ে শুরু হয় এবং শব্দ বা নাম হিসেবে ব্যবহৃত হয়। যেমন:রহমান,সোহেল,অজিজইত্যাদি।উদাহরণ:
পিতা(অজিজ, রহমান).নম্বর (Number):
প্রোলগে সংখ্যার একটি গঠন রয়েছে যা পূর্ণসংখ্যা বা ভগ্নাংশ হতে পারে। প্রোলগে সংখ্যার মাধ্যমে গাণিতিক অপারেশনও করা যেতে পারে।উদাহরণ:
X is 5 + 3.ভেরিয়েবল (Variable):
প্রোলগে ভেরিয়েবল সাধারণত বড় হাতের অক্ষর দিয়ে শুরু হয় এবং এটি পরবর্তীতে অ্যাটম বা নম্বর এর মান গ্রহণ করতে পারে। ভেরিয়েবলগুলির মান প্রোগ্রামের কার্যকরী সময়ে নির্ধারিত হয়।উদাহরণ:
X = রহমান. Y = সোহেল.লিস্ট (List):
প্রোলগে একটি লিস্ট একাধিক উপাদান (এলিমেন্ট) নিয়ে গঠিত। লিস্টের প্রথম উপাদানটি হেড (head) এবং বাকি উপাদানগুলো টেল (tail) হিসাবে বিবেচিত হয়।উদাহরণ:
[1, 2, 3, 4].স্ট্রাকচার (Structure):
প্রোলগে স্ট্রাকচার একটি কাস্টম টার্ম যা একাধিক অ্যাটম বা লিস্ট নিয়ে গঠিত হয়। এটি সাধারণত একটি ফাংশন এর মতো কাজ করে।উদাহরণ:
ছাত্র(রহমান, ১৮, সোহেল).এখানে,
ছাত্রএকটি স্ট্রাকচার যা তিনটি অ্যাটম নেয়:রহমান,১৮, এবংসোহেল।
সারসংক্ষেপ:
প্রোলগে বেসিক অপারেটর গুলি, যেমন :-, ,, ;, =, এবং \= ব্যবহার করে সম্পর্ক স্থাপন এবং সমস্যা সমাধান করা হয়। টার্ম কনস্ট্রাকশন এর মাধ্যমে বিভিন্ন ধরণের ডেটা যেমন অ্যাটম, নম্বর, ভেরিয়েবল, লিস্ট, এবং স্ট্রাকচার তৈরি করা হয় যা প্রোগ্রামের বিভিন্ন অংশে ব্যবহার করা যায়। এই অপারেটর এবং টার্ম কনস্ট্রাকশনগুলি প্রোলগে শক্তিশালী এবং নমনীয় লজিক্যাল সমস্যার সমাধান করতে সাহায্য করে।
Read more