বিষয়বস্তুতে চলুন

প্রোলগ (প্রোগ্রামিং ভাষা)

উইকিপিডিয়া, মুক্ত বিশ্বকোষ থেকে
প্রোলগ
প্যারাডাইমলজিক
নকশাকারআলাঁ কোলমেরার
প্রথম প্রদর্শিত১৯৭২; ৫৪ বছর আগে (1972)
স্থিতিশীল সংস্করণ
Part 1: General core-Edition 1 (জুন ১৯৯৫; ৩০ বছর আগে (1995-06))
Part 2: Modules-Edition 1 (জুন ২০০০; ২৫ বছর আগে (2000-06))
টাইপিং পদ্ধতিUntyped (its single data type is "term")
ফাইলনেম এক্সটেনশন.pl, .pro, .P
ওয়েবসাইট১: www.iso.org/standard/21413.html
২: www.iso.org/standard/20775.html
মুখ্য বাস্তবায়নসমূহ
আমজি! প্রোলগ, বি-প্রোলগ, চাও (প্রোগ্রামিং ভাষা), এক্লিপ্স, গ্নু প্রোলগ, এলপিএ প্রোলগ, পপলগ, পি#, কুইন্টাস প্রোলগ, স্ক্রায়ার প্রোলগ, সিক্‌স্টাস, স্ট্রবেরি, সুই-প্রোলগ, টাউ প্রোলগ, টুপ্রোলগ, উইন-প্রোলগ এক্সএসবি, ইয়াপ(প্রোলগ)
উপভাষাসমূহ
আইএসও প্রোলগ, এইডিনব্যারা প্রোলগ
যার দ্বারা প্রভাবিত
প্ল্যানার (প্রোগ্রামিং ভাষা)
যাকে প্রভাবিত করেছে
কন্সট্রেইন্ট হ্যান্ডেলিং রুলস (সিএইচআর), ক্লোজ্যুর, ডাটালগ, আর্লেং (প্রোগ্রামিং ভাষা), এপিলগ, কেএল ০, কেএল ১, লগটক, মার্কিউরি (প্রোগ্রামিং ভাষা), ওজ (প্রোগ্রামিং ভাষা), স্ট্রান্ড (প্রোগ্রামিং ভাষা), ভিজ্যুয়াল প্রোলগ
  • উইকিবইয়ে Prolog

প্রোলগ একটি লজিক প্রোগ্রামিং ভাষা যার উৎপত্তি কৃত্রিম বুদ্ধিমত্তা, স্বয়ংক্রিয় উপপাদ্য প্রমাণকরণ এবং কম্পিউটেশনাল ভাষাবিজ্ঞান থেকে।[][][]

প্রোলগ-এর মূল ভিত্তি প্রথম স্রেণির যুক্তি, যা একটি আনুষ্ঠানিক যুক্তি। অনেক প্রোগ্রামিং ভাষার তুলনায়, প্রোলগ মূলত একটি ঘোষণামূলক প্রোগ্রামিং ভাষা হিসেবে ব্যবহৃত হয়: প্রোগ্রামটি কিছু তথ্য ও হর্ন ক্লস নিয়ে গঠিত, যা ফাইনিটারি রিলেশন সংজ্ঞায়িত করে। একটি কম্পিউটেশন শুরু হয় একটি query চালানোর মাধ্যমে। প্রোলগ ছিল মূলত প্রথম দিককার লজিক প্রোগ্রামিং ভাষাগুলোর মধ্যে অন্যতম একটি[] এবং এটি আজও সবচেয়ে জনপ্রিয় লজিক প্রোগ্রামিং ভাষা, যার বহু মুক্ত ও বাণিজ্যিক সংস্করণ বিদ্যমান। এই ভাষাটি স্বয়ংক্রিয় উপপাদ্য প্রমাণকরণ,[] বিশেষজ্ঞ ব্যবস্থাসমূহ,[] টার্ম রিরাইটিং,[] টাইপ সিস্টেম,[] এবং স্বয়ংক্রিয় পরিকল্পনার[] পাশাপাশি এর মূল উদ্দেশ্য প্রাকৃতিক ভাষা প্রক্রিয়াকরণ ক্ষেত্রে ব্যবহৃত হয়েছে।[১০][১১]

প্রোলগ একটি ট্যুরিং-সম্পূর্ণ, সাধারণ উদ্দেশ্য প্রোগ্রামিং ভাষা, যা বুদ্ধিমান জ্ঞান প্রক্রিয়াকরণ অ্যাপ্লিকেশনের জন্য বিশেষভাবে উপযোগী।

কোডিং এর উদাহরণ

[সম্পাদনা]

প্রোলগ প্রোগ্রামিং ভাষায় কোডিং এর উদাহরণ:

 
best_song(Year, "অনিকেত প্রান্তর") :-
    Year >= 2006.

best_song(Year, "ভুল জন্ম") :-
    Year < 2006.

:- best_song(2007, Song),
   write(Song).

আউটপুট:

 অনিকেত প্রান্তর

ইতিহাস

[সম্পাদনা]
প্রোলগ ভাষার সময়রেখা
বছর আইক্স-মার্সেই ISO/IEC মান
১৯৭২ প্রোলগ ০
১৯৭৩ প্রোলগ I
১৯৮২ প্রোলগ II
১৯৯০ প্রোলগ III
১৯৯৫ ১৩২১১-১
১৯৯৬ প্রোলগ IV
২০০০ ১৩২১১-২
২০০৭ ১৩২১১-১:১৯৯৫/সংশোধনী ১:২০০৭
২০১২ ১৩২১১-১:১৯৯৫/সংশোধনী ২:২০১২
২০১৭ ১৩২১১-১:১৯৯৫/সংশোধনী ৩:২০১৭
প্রাথমিক কিছু প্রোলগ সিস্টেমের আইএসও মান পর্যন্ত টাইমলাইন

প্রোলগ নামটি প্রস্তাব করেছিলেন ফিলিপ রুশেল, তার স্ত্রীর পরামর্শে, Programmation en logique (ফরাসিতে "লজিক প্রোগ্রামিং") শব্দগুচ্ছের সংক্ষিপ্ত রূপ হিসেবে।[১২] প্রোলগ ভাষাটি প্রায় ১৯৭২ সালের দিকে আলাঁ কোলমেরার এবং ফিলিপ রুশেল দ্বারা তৈরি করা হয়েছিল, যারা ফ্রান্সের আইক্স-মার্সেই II বিশ্ববিদ্যালয়ের লুমিনি বিজ্ঞান অনুষদের কৃত্রিম বুদ্ধিমত্তা দলের সদস্য ছিলেন। এটি রবার্ট কোয়ালস্কির হর্ন ক্লজের প্রক্রিয়াগত ব্যাখ্যার উপর ভিত্তি করে তৈরি হয়, এবং এর একটি প্রেরণা ছিল যুক্তিকে একটি ঘোষণা-ভিত্তিক জ্ঞান উপস্থাপন ভাষা হিসেবে ব্যবহারের সঙ্গে উত্তর আমেরিকায় প্রচলিত প্রক্রিয়াভিত্তিক উপস্থাপনার মধ্যে সামঞ্জস্য স্থাপন করা। রবার্ট কোয়ালস্কির মতে, প্রথম প্রোলগ সিস্টেমটি ১৯৭২ সালে কোলমেরার ও রুশেল দ্বারা তৈরি হয়েছিল।[১৩][১৪][১৫]

প্রোলগ-এর প্রথম বাস্তবায়ন ছিল একটি ফোরট্রানে লেখা ইন্টারপ্রেটার, যা তৈরি করেছিলেন জেরার্দ বাত্তানি এবং অঁরি মেলনি। ডেভিড এইচ. ডি. ওয়ারেন এই ইন্টারপ্রেটারটি এডিনবরার বিশ্ববিদ্যালয়ে নিয়ে যান এবং সেখানে একটি বিকল্প ফ্রন্ট-এন্ড তৈরি করেন, যা "এডিনবরা প্রোলগ" সিনট্যাক্স নামে পরিচিত হয়ে ওঠে এবং আধুনিক অধিকাংশ বাস্তবায়নে ব্যবহৃত হয়। ওয়ারেন প্রথম প্রোলগ কম্পাইলারও তৈরি করেন, যা ফার্নান্দো পেরেইরার সঙ্গে যৌথভাবে উন্নয়ন করে প্রভাবশালী ডিইসি-১০ প্রোলগ তৈরি করেন। পরে তিনি এই ডিইসি-১০ প্রোলগের ধারণাগুলোকে সাধারণীকরণ করে ওয়ারেন অ্যাবস্ট্রাক্ট মেশিন (ওয়েম) তৈরি করেন।

ইউরোপীয় কৃত্রিম বুদ্ধিমত্তা গবেষকরা প্রোলগ পছন্দ করতেন, অন্যদিকে মার্কিন যুক্তরাষ্ট্রে লিস্প-এর প্রতি ঝোঁক ছিল। এ নিয়ে প্রায়ই ভাষাগত উৎকর্ষ নিয়ে জাতীয়তাবাদী বিতর্ক দেখা যেত।[১৬] আধুনিক প্রোলগ উন্নয়নের পেছনে একটি বড় চালিকা শক্তি ছিল পঞ্চম প্রজন্মের কম্পিউটার সিস্টেম (ফিফ্‌থ জেনারেশন কম্পিউটার সিস্টেম - এফজিসিএস) প্রকল্প, যেখানে প্রথম অপারেটিং সিস্টেমের জন্য প্রোলগ-এর একটি সংস্করণ কার্নেল ল্যাঙ্গুয়েজ[note ১] তৈরি করা হয়।

প্রাথমিক প্রোলগ একটি রেজোলিউশন থিওরেম প্রুভার ব্যবহার করে শুধুমাত্র হর্ন ক্লজ-ভিত্তিক যুক্তিতে সীমাবদ্ধ ছিল, যার রূপ ছিল:

H :- B1, ..., Bn.

থিওরেম-প্রুভার এই ধরনের ক্লজকে নিম্নরূপ প্রক্রিয়ায় ব্যাখ্যা করত:

H সমাধান করতে হলে, B1, ..., Bn সমাধান করতে হবে।

পরবর্তীতে প্রোলগে "ব্যর্থতা দ্বারা নাকচকরণ" (নেগেশন এ্যস ফেইলর) যুক্ত হয়, যেখানে NOT (Bi) ধরনের নেতিবাচক শর্তসমূহ প্রমাণ করতে চেষ্টা করা হয়, এবং যদি Bi প্রমাণে ব্যর্থ হয় তবে তা সত্য ধরা হয়।

প্রোলগে পরবর্তী সম্প্রসারণের মাধ্যমে মূল দল কন্সট্রেইন্ট লজিক প্রোগ্রামিং বৈশিষ্ট্য যুক্ত করে, যা বিভিন্ন বাস্তবায়নে অন্তর্ভুক্ত করা হয়।

প্রভাব

[সম্পাদনা]

যদিও প্রোলগ গবেষণা ও শিক্ষা ক্ষেত্রে ব্যাপকভাবে ব্যবহৃত হয়,[১৭] প্রোলগ এবং অন্যান্য লজিক প্রোগ্রামিং ভাষা সাধারণভাবে কম্পিউটার শিল্পে উল্লেখযোগ্য প্রভাব ফেলতে পারেনি।[১৮] অধিকাংশ প্রোলগ অ্যাপ্লিকেশন শিল্প মান অনুযায়ী ছোট পরিসরে থাকে, যার মধ্যে খুব কমই ১ লক্ষ কোড লাইনের বেশি হয়।[১৮][১৯]

বৃহৎ প্রোগ্রাম তৈরিকে (প্রোগ্রামিং ইন দ্য লার্জ) প্রোলগে জটিল বলে মনে করা হয়, কারণ অধিকাংশ প্রোলগ কম্পাইলার মডিউল সিস্টেম সমর্থন করে না, এবং প্রধান প্রধান প্রোলগ কম্পাইলারগুলোর মধ্যে মডিউল সিস্টেমের অসামঞ্জস্যতা রয়েছে। প্রোলগ কোডের পোর্টেবলিটি নিয়েও সমস্যা ছিল, তবে ২০০৭ সালের পর থেকে উন্নয়নের ফলে বলা হয়েছে: "এডিনব্যারা/কুইন্টাস ভিত্তিক প্রোলগ বাস্তবায়নগুলোর মধ্যে বহনযোগ্যতা এতটাই ভালো হয়েছে যে প্রকৃত কাজের অ্যাপ্লিকেশন তৈরি ও রক্ষণাবেক্ষণ সম্ভব হচ্ছে।"[২০]

প্রোলগে তৈরি সফটওয়্যারকে প্রথাগত প্রোগ্রামিং ভাষার তুলনায় কম পারফরম্যান্সের কারণে সমালোচিত করা হয়েছে। বিশেষ করে, প্রোলগের ননডিটারমিনিস্টিক ইভ্যালুয়েশন কৌশলটি নির্ধারিত ডিটারমিনিস্টিক কম্প্যুটেশনের ক্ষেত্রে সমস্যা তৈরি করতে পারে, এমনকি যখন "ডোন্ট কেয়ার নন-ডিটারমিনিসম" ব্যবহৃত হয় (যেখানে সব সম্ভাবনার উপর ব্যাকট্র্যাকিং না করে একটি বিকল্প বেছে নেওয়া হয়)। কাঙ্ক্ষিত পারফরম্যান্স অর্জনের জন্য প্রোলগে "কাট" এবং অন্যান্য ভাষাগত কাঠামো ব্যবহার করতে হয়, যা প্রোলগের অন্যতম প্রধান আকর্ষণ—প্রোগ্রামকে উভয়দিকেই চালানো যায়—এই বৈশিষ্ট্যটিকে ব্যাহত করে।[২১]

প্রোলগ সম্পূর্ণরূপে ঘোষণামূলক নয়: কারণ এর মধ্যে "কাট অপারেটর" এর মতো কাঠামো থাকে, একটি প্রোলগ প্রোগ্রাম বোঝার জন্য প্রক্রিয়াগত পাঠ বা প্রসিডিউরাল রিডিং-এর প্রয়োজন হয়।[২২] প্রোলগ প্রোগ্রামে ক্লজের ক্রম গুরুত্বপূর্ণ, কারণ ভাষাটির কার্যপ্রণালী সেই ক্রমের উপর নির্ভর করে।[২৩] অন্যান্য লজিক প্রোগ্রামিং ভাষা, যেমন ডাটালগ, প্রকৃতপক্ষে ঘোষণামূলক তবে তারা ভাষার ক্ষমতাকে সীমিত করে। এর ফলে, অনেক বাস্তব প্রোলগ প্রোগ্রাম প্রোলগের ডেপ্‌থ-ফার্স্ট সার্চ পদ্ধতির সঙ্গে সামঞ্জস্য রেখে লেখা হয়, বরং একটি বিশুদ্ধ ঘোষণামূলক লজিক প্রোগ্রামের চেয়ে।[২১]

  1. কার্নেল ল্যাঙ্গুয়েজ হলো একটি মৌলিক, সরলকৃত ও সীমিত কার্যক্ষমতার প্রোগ্রামিং ভাষা, যা কোনো জটিল বা উচ্চ-স্তরের প্রোগ্রামিং ভাষা বা সিস্টেমের ভিত্তি বা কোর/মূল অংশ হিসেবে ব্যবহৃত হয়। এটি সাধারণত ভাষার মৌলিক নিয়ম, গঠন ও গাণিতিক যুক্তির কাঠামো ধারণ করে, যাতে অন্যান্য বৈশিষ্ট্য বা উপাদান তার উপর নির্মিত হতে পারে। কার্নেল ল্যাঙ্গুয়েজ এমনভাবে ডিজাইন করা হয় যাতে তা সহজে বিশ্লেষণযোগ্য, অপটিমাইজযোগ্য এবং একাধিক প্রসেসিং মডেলে প্রয়োগযোগ্য হয়।

তথ্যসূত্র

[সম্পাদনা]
  1. Clocksin, William F.; Mellish, Christopher S. (২০০৩)। Programming in Prolog। Berlin; New York: Springer-Verlag। আইএসবিএন ৯৭৮-৩-৫৪০-০০৬৭৮-৭
  2. Bratko, Ivan (২০১২)। Prolog programming for artificial intelligence (4th সংস্করণ)। Harlow, England; New York: Addison Wesley। আইএসবিএন ৯৭৮-০-৩২১-৪১৭৪৬-৬
  3. Covington, Michael A. (১৯৯৪)। Natural language processing for Prolog programmers। Englewood Cliffs, N.J.: Prentice Hall। আইএসবিএন ৯৭৮-০-১৩-৬২৯২১৩-৫
  4. See Logic programming § History.
  5. Stickel, M. E. (১৯৮৮)। "A prolog technology theorem prover: Implementation by an extended prolog compiler"Journal of Automated Reasoning (4): ৩৫৩–৩৮০। ডিওআই:10.1007/BF00297245এস২সিআইডি 14621218
  6. Merritt, Dennis (১৯৮৯)। Building expert systems in Prolog। Berlin: Springer-Verlag। আইএসবিএন ৯৭৮-০-৩৮৭-৯৭০১৬-৫
  7. Felty, Amy. "A logic programming approach to implementing higher-order term rewriting." Extensions of Logic Programming (1992): 135-161.
  8. Kent D. Lee (১৯ জানুয়ারি ২০১৫)। Foundations of Programming Languages। Springer। পৃ. ২৯৮–। আইএসবিএন ৯৭৮-৩-৩১৯-১৩৩১৪-০
  9. Ute Schmid (২১ আগস্ট ২০০৩)। Inductive Synthesis of Functional Programs: Universal Planning, Folding of Finite Programs, and Schema Abstraction by Analogical Reasoning। Springer Science & Business Media। আইএসবিএন ৯৭৮-৩-৫৪০-৪০১৭৪-২
  10. Fernando C. N. Pereira; Stuart M. Shieber (২০০৫)। Prolog and Natural Language Analysis। Microtome।
  11. Adam Lally; Paul Fodor (৩১ মার্চ ২০১১)। "Natural Language Processing With Prolog in the IBM Watson System"। Association for Logic Programming। ৩ সেপ্টেম্বর ২০১৪ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ১৩ জুন ২০১৪ See also Watson (computer).
  12. Colmerauer, A. and Roussel, P., 1996. The birth of Prolog. In History of programming languages---II (pp. 331-367).
  13. Kowalski, R. A. (১৯৮৮)। "The early years of logic programming" (পিডিএফ)Communications of the ACM৩১: ৩৮। ডিওআই:10.1145/35043.35046এস২সিআইডি 12259230
  14. Colmerauer, A.; Roussel, P. (১৯৯৩)। "The birth of Prolog" (পিডিএফ)ACM SIGPLAN Notices২৮ (3): ৩৭। ডিওআই:10.1145/155360.155362
  15. "Prolog: a brief history"। সংগ্রহের তারিখ ২১ নভেম্বর ২০২১
  16. Pountain, Dick (অক্টোবর ১৯৮৪)। "POP and SNAP"Byte। পৃ. ৩৮১। সংগ্রহের তারিখ ২৩ অক্টোবর ২০১৩
  17. "Computer science - Programming Languages, Syntax, Algorithms | Britannica"www.britannica.com (ইংরেজি ভাষায়)। সংগ্রহের তারিখ ১২ জুলাই ২০২৩
  18. 1 2 Logic programming for the real world. Zoltan Somogyi, Fergus Henderson, Thomas Conway, Richard O'Keefe. Proceedings of the ILPS'95 Postconference Workshop on Visions for the Future of Logic Programming.
  19. "FAQ: Prolog Resource Guide 1/2 [Monthly posting]Section - [1-8] The Prolog 1000 Database"Faqs.org
  20. Jan Wielemaker and Vıtor Santos Costa: Portability of Prolog programs: theory and case-studies. CICLOPS-WLPE Workshop 2010 ওয়েব্যাক মেশিনে আর্কাইভকৃত ২০১০-০৭-১৬ তারিখে.
  21. 1 2 Kiselyov, Oleg; Kameyama, Yukiyoshi (২০১৪)। Re-thinking Prolog। Proc. 31st meeting of the Japan Society for Software Science and Technology।
  22. Franzen, Torkel (১৯৯৪), "Declarative vs procedural", Association of Logic Programming, (3)
  23. Dantsin, Evgeny; Eiter, Thomas; Gottlob, Georg; Voronkov, Andrei (২০০১)। "Complexity and Expressive Power of Logic Programming"ACM Computing Surveys৩৩ (3): ৩৭৪–৪২৫। ডিওআই:10.1145/502807.502810