ফাংশনাল প্রোগ্রামিংয়ের সুবিধাগুলি বর্ণনা করে অনেক নিবন্ধগুলিতে, আমি হাস্কেল, এমএল, স্কেলা বা ক্লোজারের মতো কার্যকরী প্রোগ্রামিং ভাষা দেখেছি, সি / সি ++ / সি # / জাভা এর মতো অপরিহার্য ভাষাগুলি থেকে পৃথক "ঘোষিত ভাষাগুলি" হিসাবে পরিচিত। আমার প্রশ্নটি হ'ল প্রয়োজনীয় ক্রিয়াকলাপের ভাষাগুলি ঘোষণামূলক করে তোলে।
ডিক্লারেটিভ এবং ইমপিটারিটিভ প্রোগ্রামিংয়ের মধ্যে পার্থক্য বর্ণনা করার একটি প্রায়শই সম্মুখীন হওয়া ব্যাখ্যাটি হ'ল ইম্পেরটিভ প্রোগ্রামিংয়ে আপনি কম্পিউটারকে ঘোষণামূলক ভাষায় "কী করবেন" এর বিপরীতে কম্পিউটারকে "কীভাবে করতে হবে" বলবেন। আমার এই ব্যাখ্যায় সমস্যাটি হ'ল আপনি সমস্ত প্রোগ্রামিং ভাষায় ক্রমাগত উভয়ই করছেন। এমনকি আপনি যদি সর্বনিম্ন স্তরের সমাবেশে যান তবে আপনি কম্পিউটারকে "কী করবেন" বলছেন, আপনি সিপিইউকে দুটি সংখ্যা যুক্ত করতে বলেছেন, সংযোজনটি কীভাবে সম্পাদন করবেন সে সম্পর্কে আপনি নির্দেশ দেন না। যদি আমরা স্পেকট্রামের অন্য প্রান্তে যাই, হাস্কেলের মতো উচ্চ স্তরের বিশুদ্ধ কার্যকরী ভাষা, আপনি আসলে কম্পিউটারকে একটি নির্দিষ্ট কাজ কীভাবে অর্জন করবেন তা বলছেন, আপনার প্রোগ্রামটি নির্দিষ্ট কাজটি অর্জনের জন্য নির্দেশের ক্রম যা কম্পিউটার একা কীভাবে অর্জন করতে জানে না। আমি বুঝেছি যে হাস্কেল, ক্লোজার ইত্যাদি ভাষাগুলি স্পষ্টতই সি / সি ++ / সি # / জাভার চেয়ে উচ্চতর স্তর এবং অলস মূল্যায়ন, পরিবর্তনীয় ডেটা স্ট্রাকচার, বেনামে ফাংশন, তরকারীকরণ, ধ্রুবক ডেটা স্ট্রাকচার ইত্যাদির মতো বৈশিষ্ট্য সরবরাহ করে which কার্যকরী প্রোগ্রামিং সম্ভব এবং দক্ষ, তবে আমি তাদের ঘোষণামূলক ভাষা হিসাবে শ্রেণিবদ্ধ করব না।
আমার জন্য একটি খাঁটি ঘোষিত ভাষাগুলি এমন একটি হবে যা কেবলমাত্র ঘোষণার সম্পূর্ণরূপে অন্তর্ভুক্ত থাকে, এই জাতীয় ভাষার উদাহরণ সিএসএস হবে (হ্যাঁ আমি জানি সিএসএস প্রযুক্তিগতভাবে কোনও প্রোগ্রামিং ভাষা হবে না)। সিএসএসে কেবল স্টাইলের ঘোষণা রয়েছে যা পৃষ্ঠার এইচটিএমএল এবং জাভাস্ক্রিপ্ট দ্বারা ব্যবহৃত হয় by সিএসএস ঘোষণা দেওয়ার পাশাপাশি অন্য কিছু করতে পারে না, এটি শ্রেণীর ফাংশন তৈরি করতে পারে না, অর্থাৎ এমন ফাংশন যা কিছু প্যারামিটারের উপর ভিত্তি করে প্রদর্শিত স্টাইল নির্ধারণ করে, আপনি সিএসএস স্ক্রিপ্টগুলি কার্যকর করতে পারবেন না ইত্যাদি। যা আমার জন্য একটি ঘোষণামূলক ভাষার বর্ণনা দেয় (নোটিশ আমি ঘোষণাপত্রটি বলেনি না প্রোগ্রামিং ভাষা)।
হালনাগাদ:
আমি সম্প্রতি প্রোলগের সাথে ঘুরে বেড়াচ্ছি এবং আমার কাছে, প্রোলোগ হ'ল একটি সম্পূর্ণ ঘোষণামূলক ভাষার নিকটতম প্রোগ্রামিং ভাষা (অন্তত আমার মতে), যদি এটি কেবলমাত্র সম্পূর্ণ ঘোষণামূলক প্রোগ্রামিং ভাষা না হয়। প্রোলোগে বিস্তৃত প্রোগ্রামিংয়ের মাধ্যমে এমন কোনও ঘোষণা দেওয়া হয় যা কোনও সত্য (একটি নির্দিষ্ট ভবিষ্যতের জন্য প্রডিকেট ফাংশন দেয়) বা একটি নিয়ম (ইনপুটগুলির উপর ভিত্তি করে প্রদত্ত শর্তের / প্যাটার্নের জন্য সত্য প্রত্যাবর্তনকারী একটি প্রাকটিক্যাল ফাংশন), নিয়ম করে একটি প্যাটার্ন ম্যাচিং কৌশল ব্যবহার করে সংজ্ঞায়িত করা হয়। প্রোলগে কিছু করার জন্য আপনি ভেরিয়েবলের সাথে প্রিকিকেটের এক বা একাধিক ইনপুট প্রতিস্থাপন করে জ্ঞান ভিত্তিক প্রশ্নটি করেন এবং প্রোলোগ চলক (গুলি) এর মান খুঁজে পাওয়ার চেষ্টা করেন যার জন্য ভবিষ্যদ্বাণী সফল হয়।
আমার বক্তব্যটি প্রলগে রয়েছে যে কোনও অপরিহার্য নির্দেশনা নেই, আপনি মূলত কম্পিউটারটি যা জানে তা জানাতে (ঘোষণা করে) এবং তারপরে জ্ঞান সম্পর্কে জিজ্ঞাসা (জিজ্ঞাসাবাদ) করছেন। ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজে আপনি এখনও নির্দেশনা দিচ্ছেন যেমন একটি মান গ্রহণ করুন, এক্স ফাংশনটি কল করুন এবং এতে 1 যুক্ত করুন ইত্যাদি, এমনকি যদি আপনি সরাসরি মেমরির অবস্থানগুলি পরিচালনা করেন না বা ধাপে ধাপে গণনা লিখে রাখেন না। আমি বলব না যে হাস্কেল, এমএল, স্কেলা বা ক্লোজারে প্রোগ্রামিং এই অর্থে ঘোষিত, যদিও আমি ভুল হতে পারি। যথাযথ, সত্য, খাঁটি ফাংশনাল প্রোগ্রামিং ঘোষিত অর্থে যেটি আমি উপরে বর্ণনা করেছি।
(let [x 1] (let [x (+ x 2)] (let [x (* x x)] x)))
(আশা করি আপনি এটি বুঝতে পেরেছেন, ক্লোজার)। আমার আসল প্রশ্নটি হ'ল x = 1; x += 2; x *= x; return x;
এটি আমার মতামত থেকে একে একে আলাদা করে তোলে যা বেশিরভাগই একই রকম।