কার্যকরী, ঘোষণামূলক এবং কার্যকর প্রোগ্রামিং [বন্ধ]


466

কার্যকরী, ঘোষণামূলক এবং অত্যাবশ্যক প্রোগ্রামিং শব্দের অর্থ কী?


3
এখানে কিছু দুর্দান্ত উত্তর আছে। এক মজার বিষয় সম্পূর্ণরূপে ব্যাখ্যা দিয়েছিলেন না যে ঘোষণামূলক এবং অনুজ্ঞাসূচক শুধু বিভিন্ন শৈলী বা চেয়েও বেশি পরিপূরক এবং মিথোজীবী হয়, কি বনাম কিভাবে
কিট

1
@ কিট ইমো, এই পৃষ্ঠার উত্তরগুলির কয়েকটি শর্তাদি বিবাদ করছে। ডিপি == রেফারেন্সিয়াল স্বচ্ছতা (আরটি)। ডিপি এবং আইপি বিপরীত, সুতরাং আফিক্স সম্পূর্ণরূপে পরিপূরক নয়, অর্থাত্ একটি সম্পূর্ণ প্রোগ্রাম উভয় স্টাইলে লেখা যেতে পারে। কোনও ফাংশনে কলটি ডিপি (আরটি) বা আইপি হতে পারে, এর বাস্তবায়ন হয় বা মিক্স হতে পারে। তারা এই অর্থে সিম্বিওটিক নয় যে অন্যথায় ডিপি ফাংশনে আইপি ফাংশনে কল করলে ডিপি ফাংশনের কল আইপি তৈরি করতে পারে। এগুলি সহাবস্থানীয় যে বাস্তব বিশ্বের (যেমন কার্যকরী প্রতিক্রিয়াশীল) প্রোগ্রামগুলি একটি মিশ্রণ নিয়োগ করতে পারে, যেমন আইপি শীর্ষ স্তরের কলকে ডিপি ফাংশনে ডাকা হয়।
শেলবি মুর III

উইকের সাথে উইকি যোগ করতে হবে বা উইকের মতো কিছু সম্পর্কিত লিঙ্ক এখানে উইকিপিডিয়া en.wikedia.org/wiki/Compistance_of_programming_paradigms
জো

JQuery meta.stackexchange.com/a/19492- এর জন্য ভোট দিন
সত্য

1
এই প্রশ্নটি মেটাতে
ডুপ্লোড

উত্তর:


262

এটি লেখার সময়, এই পৃষ্ঠায় শীর্ষে দেওয়া উত্তরগুলি সঠিক নয় এবং উইকিপিডিয়াকে উদ্ধৃত করে এমন উত্তর সহ ঘোষণামূলক বনাম অপরিহার্য সংজ্ঞাতে গলিত। কিছু উত্তর বিভিন্ন উপায়ে শর্তগুলি বিভ্রান্ত করছে।

এছাড়াও পড়ুন আমার ব্যাখ্যা কেন স্প্রেডশীট প্রোগ্রামিং ঘোষণামূলক হয়, নির্বিশেষে যে সূত্র কোষ পরিবর্তন ঘটান।

এছাড়াও, বেশ কয়েকটি উত্তর দাবি করে যে কার্যকরী প্রোগ্রামিং অবশ্যই ঘোষণার একটি উপসেট হতে পারে। এই মুহুর্তে এটি নির্ভর করে যদি আমরা "পদ্ধতি" থেকে "ফাংশন" কে পৃথক করি। জোরপূর্বক বনাম ঘোষণার আগে পরিচালনা করতে দেয়।

ঘোষণামূলক অভিব্যক্তি সংজ্ঞা

শুধুমাত্র গুণ যা সম্ভবত একটি পার্থক্য করতে পারেন ঘোষণামূলক একটি থেকে অভিব্যক্তি অনুজ্ঞাসূচক অভিব্যক্তি তার উপ-অভিব্যক্তির উল্লেখ স্বচ্ছতা (আর.টি.) হয়। অন্যান্য সমস্ত বৈশিষ্ট্য হয় উভয় ধরণের এক্সপ্রেশনগুলির মধ্যে ভাগ করা হয় বা আরটি থেকে প্রাপ্ত der

একটি 100% ঘোষণামূলক ভাষা (যার মধ্যে প্রতিটি সম্ভাব্য এক্সপ্রেশনটি আরটি হয়) এটি (অন্যান্য আরটি প্রয়োজনীয়তার মধ্যে) সঞ্চিত মানগুলি, যেমন এইচটিএমএল এবং বেশিরভাগ হাস্কেলের পরিবর্তনের অনুমতি দেয় না।

আরটি এক্সপ্রেশন সংজ্ঞা

আরটি প্রায়শই "কোনও পার্শ্ব প্রতিক্রিয়া না" হিসাবে চিহ্নিত হয়। শব্দ প্রভাবের একটি সংক্ষিপ্ত সংজ্ঞা নেই, সুতরাং কিছু লোক সম্মত হন না যে "কোনও পার্শ্ব-প্রতিক্রিয়া" আরটি-র মতো নয়। আরটিটির একটি সুনির্দিষ্ট সংজ্ঞা রয়েছে

যেহেতু প্রতিটি উপ-এক্সপ্রেশনটি ধারণামূলকভাবে একটি ফাংশন কল, আরটিটির প্রয়োজন হয় যে কোনও ফাংশনের বাস্তবায়ন (যেমন ডাকা ফাংশনের অভ্যন্তরে এক্সপ্রেশন (গুলি) ফাংশনের বাহ্যিক পরিবর্তনীয় স্থানে অ্যাক্সেস নাও করতে পারে ( পরিবর্তনীয় স্থানীয় রাষ্ট্রের প্রবেশাধিকার হল অনুমতি দেওয়া হয়েছে)। সহজভাবে বলতে গেলে, ফাংশন (বাস্তবায়ন) খাঁটি হওয়া উচিত ।

খাঁটি ফাংশন সংজ্ঞা

একটি খাঁটি ফাংশন প্রায়শই বলা হয় "কোনও পার্শ্ব প্রতিক্রিয়া নেই"। শব্দগুলির প্রভাবগুলির একটি নির্দিষ্ট সংজ্ঞা নেই, তাই কিছু লোক সম্মত হয় না।

খাঁটি ফাংশনগুলির নিম্নলিখিত বৈশিষ্ট্য রয়েছে।

  • একমাত্র পর্যবেক্ষণযোগ্য আউটপুট হ'ল রিটার্ন মান।
  • একমাত্র আউটপুট নির্ভরতা আর্গুমেন্ট।
  • কোনও আউটপুট উত্পন্ন হওয়ার আগে আর্গুমেন্টগুলি পুরোপুরি নির্ধারিত হয়।

মনে রাখবেন আরটি এক্সপ্রেশনগুলিতে প্রযোজ্য (যার মধ্যে ফাংশন কলগুলি অন্তর্ভুক্ত) এবং বিশুদ্ধতা (প্রয়োগকরণ) ফাংশনে প্রযোজ্য।

অপরিশোধিত ফাংশনগুলির একটি অস্পষ্ট উদাহরণ যা আরটি এক্সপ্রেশনগুলি সংহত করে, তবে এটি কারণ হ'ল বিশুদ্ধতাটি বিঘ্নিত বিমূর্ত স্তরটিতে ভেঙে যায়। আপনার আসলে এটি জানার দরকার নেই। আরটি এক্সপ্রেশন করতে, আপনি খাঁটি ফাংশন বলে।

আরটি এর ডেরাইভেটিভ বৈশিষ্ট্য

ঘোষিত প্রোগ্রামিংয়ের জন্য উদ্ধৃত অন্য কোনও বৈশিষ্ট্য, যেমন উইকিপিডিয়া দ্বারা ব্যবহৃত ১৯৯৯ সালের উদ্ধৃতিটি আরটি থেকে প্রাপ্ত, বা আবশ্যক প্রোগ্রামিংয়ের সাথে ভাগ করা হয়। এইভাবে প্রমাণিত যে আমার সুনির্দিষ্ট সংজ্ঞাটি সঠিক।

দ্রষ্টব্য, বাহ্যিক মানগুলির অপরিবর্তনীয়তা হ'ল আরটি-র প্রয়োজনীয়তার একটি উপসেট।

  • ডিক্লারেটিভ ভাষাগুলিতে লুপিং স্ট্রাকচার কাঠামো নেই, যেমন forএবং while, কারণ অপরিবর্তনীয়তার কারণে লুপের অবস্থাটি কখনই পরিবর্তিত হবে না।

  • ঘোষিত ভাষাগুলি নেস্টেড ফাংশন অর্ডার (ওরফে লজিকাল নির্ভরতা) ব্যতীত নিয়ন্ত্রণ-প্রবাহ প্রকাশ করে না, কারণ অপরিবর্তনীয়তার কারণে মূল্যায়ন আদেশের অন্যান্য পছন্দগুলি ফলাফল পরিবর্তন করে না (নীচে দেখুন)।

  • ঘোষিত ভাষাগুলি যৌক্তিক "পদক্ষেপ" প্রকাশ করে (অর্থাত নেস্টেড আরটি ফাংশন কল অর্ডার), তবে প্রতিটি ফাংশন কল উচ্চ স্তরের শব্দার্থক (যেমন "কী করতে হবে") তা ঘোষণামূলক প্রোগ্রামিংয়ের প্রয়োজনীয়তা নয়। অপরিহার্য থেকে পার্থক্য হ'ল অপরিবর্তনীয়তার কারণে (যেমন আরও সাধারণভাবে আরটি), এই "পদক্ষেপগুলি" পরিবর্তিত অবস্থার উপর নির্ভর করতে পারে না, কেবলমাত্র প্রকাশিত যুক্তির সম্পর্কযুক্ত ক্রম (অর্থাত্ ফাংশন কলগুলির নেস্টিংয়ের ক্রম, ওরফে সাব-এক্সপ্রেশন) )।

    উদাহরণস্বরূপ, অনুচ্ছেদে <p>উপ-এক্সপ্রেশন (অর্থাত্ ট্যাগ) মূল্যায়ন না করা পর্যন্ত এইচটিএমএল অনুচ্ছেদ প্রদর্শন করা যাবে না। কোনও পরিবর্তনীয় অবস্থা নেই, কেবলমাত্র ট্যাগ ক্রমবিন্যাসের যৌক্তিক সম্পর্কের কারণে কেবলমাত্র একটি অর্ডার নির্ভরতা (উপ-এক্সপ্রেশনগুলির বাসা বাঁধে, যা অ্যানালিজে ফাংশন কলগুলি হয় )।

  • এইভাবে অপরিবর্তনীয়তার ডেরাইভেটিভ বৈশিষ্ট্য রয়েছে (আরও সাধারণভাবে আরটি), যে ঘোষণামূলক অভিব্যক্তিগুলি কেবলমাত্র উপাদানগুলির যৌক্তিক সম্পর্কগুলি প্রকাশ করে (অর্থাত্ উপ-এক্সপ্রেশন ফাংশন আর্গুমেন্টের) এবং পরিবর্তনীয় রাষ্ট্রীয় সম্পর্কগুলির নয়।

মূল্যায়ন আদেশ

উপ-এক্সপ্রেশনগুলির মূল্যায়ন আদেশের পছন্দটি কেবল তখনই একটি পৃথক ফলাফল দিতে পারে যখন কোনও ফাংশন কল আরটি না হয় (যেমন ফাংশনটি খাঁটি নয়), যেমন কোনও ফাংশনের বাইরের কিছু পরিবর্তনীয় স্থিতি ফাংশনের মধ্যে অ্যাক্সেস করা হয়।

উদাহরণস্বরূপ, কিছু নেস্টেড এক্সপ্রেশন, যেমন দেওয়া f( g(a, b), h(c, d) )যদি ফাংশন, ফাংশন আর্গুমেন্ট উৎসুক এবং অলস মূল্যায়ন একই ফলাফল দেবে f, gএবং hবিশুদ্ধ হয়।

যদিও, যদি ফাংশনগুলি f, gএবং hখাঁটি না হয় তবে মূল্যায়ন আদেশের পছন্দটি আলাদা ফলাফল দিতে পারে।

দ্রষ্টব্য, নেস্টেড এক্সপ্রেশনগুলি ধারণাগতভাবে নেস্টেড ফাংশন, যেহেতু এক্সপ্রেশন অপারেটরগুলি কেবল ফাংশন কলগুলি অ্যানারি উপসর্গ, অ্যানারি পোস্টফিক্স বা বাইনারি ইনফিক্স স্বরলিপি হিসাবে মাস্ক্রেড করে।

Tangentially, যদি সব শনাক্তকারী, যেমন a, b, c, dহয় অপরিবর্তনীয় সর্বত্র রাষ্ট্রীয় প্রোগ্রাম বহিরাগত অ্যাক্সেস করা যাবে না (অর্থাত, I / O), এবং সেখানে কোন বিমূর্ততা স্তর বিচ্ছেদ হয়, তাহলে ফাংশন সবসময় বিশুদ্ধ হয়।

যাইহোক, হাস্কেলের একটি আলাদা বাক্য গঠন রয়েছে f (g a b) (h c d),।

মূল্যায়ন আদেশ বিশদ

একটি ফাংশন একটি ইনপুট থেকে আউটপুট এ স্টেট ট্রানজিশন (কোনও পরিবর্তনীয় সঞ্চিত মান নয়)। খাঁটি ফাংশনগুলিতে কল করার জন্য আরটি রচনাগুলির জন্য , এই রাষ্ট্রীয় রূপান্তরগুলির ক্রম-কার্য-সম্পাদন স্বাধীন। পার্শ্বপ্রতিক্রিয়ার অভাব এবং একটি আরটি ফাংশন তার ক্যাশেড মান দ্বারা প্রতিস্থাপিত হতে পারে যে নীতিটির কারণে প্রতিটি ফাংশন কলের স্থিতিস্থাপকতা অন্যদের থেকে স্বতন্ত্র । একটি জনপ্রিয় ভ্রান্ত ধারণা সংশোধন করার জন্য , খাঁটি monadic রচনাটি সর্বদা ঘোষিত এবং আরটি থাকে , তবুও হাস্কেলের IOমনাদ তর্কযোগ্যভাবে অপরিষ্কার এবং এইভাবে অপরিহার্য Worldরাষ্ট্রকে এই কর্মসূচির বাহ্যিক (তবে নীচের ক্যাভিয়েটের অর্থে, পার্শ্ব-প্রতিক্রিয়াগুলি) বিচ্ছিন্ন হয়)।

আগ্রহী মূল্যায়ন অর্থ ফাংশন বলার আগে ফাংশন যুক্তিগুলি মূল্যায়ন করা হয় এবং অলস মূল্যায়নের অর্থ যুক্তিগুলি ফাংশনের মধ্যে অ্যাক্সেস না হওয়া পর্যন্ত (এবং যদি) আর্গুমেন্টগুলি মূল্যায়ন করা হয় না

সংজ্ঞা : ফাংশন পরামিতিগুলি ফাংশন সংজ্ঞা সাইটে ঘোষণা করা হয় এবং ফাংশন আর্গুমেন্টগুলি ফাংশন কল সাইটে সরবরাহ করা হয় । মধ্যে পার্থক্য কি জানেন পরামিতি এবং যুক্তি

ধারণার দিক থেকে, সমস্ত এক্সপ্রেশন ধ্রুবক ইনপুট ছাড়া ফাংশন হয়, ইউনারী অপারেটর এক ইনপুট সঙ্গে ফাংশন হয়, বাইনারি পোতা অপারেটার দুটি ইনপুট সঙ্গে ফাংশন হয়, কনস্ট্রাকটর ফাংশন, এবং এমনকি নিয়ন্ত্রণ বিবৃতি (যেমন (এর একটি রচনা) ফাংশন কল, যেমন হয় if, for, while) ফাংশন সঙ্গে মডেল করা যেতে পারে। অর্ডার যে এই যুক্তি ফাংশন (নেস্টেড ফাংশন কল অর্ডার দিয়ে না দ্বিধায় পরে না) মূল্যায়ন করা হয় সিনট্যাক্স ঘোষণা করা হয় না, যেমন f( g() )সাগ্রহে মূল্যায়ন পারে gতারপর fউপর gএর ফলাফলের অথবা এটি নির্ণয় করা যায়নি fএবং একমাত্র প্রখর রৌদ্রে মূল্যায়ন gযখন তার ফলাফলের মধ্যে প্রয়োজন হয় f

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

ফাংশনাল প্রোগ্রামিং

কারণ ঘোষিত প্রোগ্রামিংয়ের লুপগুলি থাকতে পারে না, তারপরে পুনরাবৃত্তি করার একমাত্র উপায় হ'ল কার্যকরী পুনরাবৃত্তি। এটি এই অর্থে যে কার্যকরী প্রোগ্রামিং ডিক্লেয়ারেশনাল প্রোগ্রামিং সম্পর্কিত।

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

ফাংশনাল প্রোগ্রামিং সাধারণত ফাংশনটিকে প্রথম-শ্রেণীর অবজেক্ট করে তোলে, যার অর্থ ফাংশন টাইপ ব্যাকরণে অন্য যে কোনও প্রকারে উপস্থিত হতে পারে। ফলশ্রুতিটি হ'ল ফাংশনগুলি ফাংশনগুলিকে ইনপুট করতে এবং পরিচালনা করতে পারে, এইভাবে ফাংশন রচনার উপর জোর দিয়ে উদ্বেগ-বিহীনতার জন্য সরবরাহ করে, অর্থাত্‍ একটি ডিটারমিনিস্টিক কম্পিউটেশনের সাব কমপুটেশনের মধ্যে নির্ভরতা পৃথক করে।

উদাহরণস্বরূপ, সংগ্রহের প্রতিটি উপাদানকে প্রয়োগ করা যেতে পারে এমন সম্ভাব্য বিশেষায়িত ক্রিয়াকলাপগুলির জন্য প্রতিটি পৃথক ফাংশন (এবং লুপগুলির পরিবর্তে পুনরায় নিয়োগগুলি নিয়োগের পরিবর্তে) কার্যকরী প্রোগ্রামিং পুনরায় ব্যবহারযোগ্য পুনরাবৃত্তি নিয়োগ করে ফাংশন, যেমন map, fold, filter। এই পুনরাবৃত্তি ফাংশন ইনপুট একটি প্রথম শ্রেণীর বিশেষায়িত ক্রিয়া ফাংশন। এই পুনরাবৃত্তি ফাংশন সংগ্রহ পুনরাবৃত্তি এবং প্রতিটি উপাদান জন্য ইনপুট বিশেষ ক্রিয়াকলাপ কল। এই ক্রিয়া ফাংশনগুলি আরও সংক্ষিপ্ত কারণ এগুলি সংগ্রহ পুনরাবৃত্তি করতে লুপিং স্টেটমেন্টগুলি আর রাখার প্রয়োজন নেই।

তবে খেয়াল করুন যে কোনও ফাংশন যদি খাঁটি না হয় তবে তা সত্যিই একটি প্রক্রিয়া। আমরা সম্ভবত তর্ক করতে পারি যে কার্যকরী প্রোগ্রামিং যা অপরিষ্কার ফাংশন ব্যবহার করে, এটি আসলে প্রক্রিয়াজাতীয় প্রোগ্রামিং। সুতরাং আমরা যদি সম্মতি স্বীকার করি যে ঘোষণামূলক এক্সপ্রেশনগুলি আরটি হয়, তবে আমরা বলতে পারি যে প্রসেসালাল প্রোগ্রামিংটি ডিকোলেটিভ প্রোগ্রামিং নয়, এবং এইভাবে আমরা তর্ক করতে পারি যে ফাংশনাল প্রোগ্রামিং সর্বদা আরটি হয় এবং অবশ্যই ডিক্যারেটিভ প্রোগ্রামিংয়ের একটি উপসেট হতে হবে।

উপমা

প্রথম শ্রেণির ফাংশন সহ এই কার্যকরী রচনাটি স্বাধীন ফাংশনকে আলাদা করে সমান্তরালতার গভীরতা প্রকাশ করতে পারে।

ব্রেন্টের নীতিমালা: কাজের ডাব্লু এবং গভীরতা ডি এর সাথে গণনার সময়সী পি (প্রসেসর) প্রাইমগুলিতে প্রয়োগ করা যেতে পারে (সর্বোচ্চ (ডাব্লু / পি, ডি))।

সম্মতি এবং সমান্তরালতা উভয়ের জন্য ঘোষণামূলক প্রোগ্রামিংও প্রয়োজন , অর্থাত অপরিবর্তনীয়তা এবং আরটি।

সুতরাং সমান্তরালতা == সংহতি কোথা থেকে এসেছে এই বিপজ্জনক ধারণা? পার্শ্ব-প্রতিক্রিয়াযুক্ত ভাষাগুলির এটি প্রাকৃতিক পরিণতি: যখন আপনার ভাষাটির সর্বত্র প্রভাব রয়েছে, তখন যে কোনও সময় আপনি যখন একবারে একাধিক কাজ করার চেষ্টা করেন তখন প্রতিটি অপারেশন থেকে প্রভাবগুলি ইন্টারলাইভ করার কারণে আপনার অ-নির্ধারণবাদ হয় have । সুতরাং পার্শ্ব-কার্যকরী ভাষাগুলিতে সমান্তরালতা পাওয়ার একমাত্র উপায় হ'ল সম্মতি; তাই অবাক হওয়ার মতো বিষয় নয় যে আমরা প্রায়শই দুটি সংঘাত দেখি।

এফপি মূল্যায়ন আদেশ

নোট করুন মূল্যায়নের আদেশটি কার্যকরী রচনাটির সমাপ্তি এবং পারফরম্যান্সের পার্শ্ব-প্রতিক্রিয়াকেও প্রভাবিত করে।

ইজিয়ার (সিবিভি) এবং অলস (সিবিএন) শ্রেণীবদ্ধ দ্বন্দ্ব [ 10 ], কারণ তারা মূল্যায়নের ক্রমকে বিপরীত করেছে, যথাক্রমে বাহ্যিক বা অভ্যন্তরীণ ফাংশনগুলি প্রথমে মূল্যায়ন করা হয় কিনা। একটি উল্টোপাল্ট গাছটি কল্পনা করুন, তারপরে শাখাগুলি শীর্ষ স্তরের ফাংশন ট্রাঙ্কের জন্য ফাংশন ট্রি শাখার টিপস থেকে আগ্রহী মূল্যায়ন করুন; যদিও অলস ট্রাঙ্ক থেকে শাখা টিপস পর্যালোচনা করে। আগ্রহীর সাথে কনজেক্টিভ পণ্য নেই ("এবং", a / কে / একটি শ্রেণিবদ্ধ "পণ্য") এবং অলসির সাথে বিচ্ছিন্ন কপোড্রুকট ("বা", একটি / কে / একটি শ্রেণিবদ্ধ "অঙ্কগুলি") নেই [ 11 ]।

কর্মক্ষমতা

  • আগ্রহী

    অবসানহানির মতো, কনজেক্টিভ ফাংশনাল কম্পোজিশনের সাথে আগ্রহী আগ্রহী, অর্থাৎ কম্পোজিশনাল কন্ট্রোল স্ট্রাকচার অযথা কাজ করে যা অলসতার সাথে সম্পন্ন হয় না। জন্য উদাহরণস্বরূপ , উৎসুক সাগ্রহে এবং অকারণে, Booleans সমগ্র তালিকা মানচিত্র যখন এটি একটি ভাঁজ সঙ্গে গঠিত হয় যে প্রথম সত্য উপাদান বন্ধ।

    এই অপ্রয়োজনীয় কাজটি খাঁটি ফাংশন সহ উভয়ই আগ্রহী বনাম অলসতার ক্রমিক সময় জটিলতায় অতিরিক্ত লগ এন ফ্যাক্টারের দাবি করা "আপ" করার কারণ । একটি সমাধান হ'ল অলস কন্সট্রাক্টরগুলি (যেমন optionচ্ছিক অলস পণ্যগুলির সাথে আগ্রহী) সহ ফান্টেক্টরগুলি (উদাহরণস্বরূপ তালিকাগুলি) ব্যবহার করা, কারণ আগ্রহের সাথে অভ্যর্থনাটির ভুলটি অভ্যন্তরীণ ফাংশন থেকে উদ্ভূত হয়। এটি কারণ পণ্যগুলি গঠনমূলক ধরণের, অর্থাত্ প্রাথমিক ফিক্সপয়েন্টে প্রাথমিক বীজগণিত সহ প্রেরণামূলক প্রকার [ 11 ]

  • অলস

    সমাপ্তিহীনতার মতো অলসতাও বিচ্ছিন্ন কার্যকরী রচনার সাথে খুব অলস, অর্থাত্ সংযোজনীয় চূড়ান্ততা প্রয়োজনের পরে পরে ঘটতে পারে, ফলে অপ্রয়োজনীয় কাজ এবং দীর্ঘসূত্রতার অ-নির্ধারণবাদ উভয়ই উত্সাহী হয় না [ 10 ] [ ১১ ] । চূড়ান্ততার উদাহরণগুলি হল রাষ্ট্র, সময়সীমা, অবসানহীনতা এবং রানটাইম ব্যতিক্রম। এগুলি অপরিহার্য পার্শ্ব-প্রতিক্রিয়াগুলি রয়েছে, তবে এমনকি খাঁটি ঘোষিত ভাষায় (যেমন হাস্কেল), অপরিহার্য আইও মনডে রাষ্ট্র রয়েছে (দ্রষ্টব্য: সমস্ত মনড অপরিহার্য নয়!) স্থান বরাদ্দের ক্ষেত্রে অন্তর্ভুক্ত, এবং সময় অপরিহার্য রাষ্ট্রের সাথে সম্পর্কিত বাস্তব জগতে. এমনকি alচ্ছিক আগ্রহী কপোড্রাক্টাক্টসের সাথে আলস্য ব্যবহার করা অভ্যন্তরীণ কোপোডাক্টগুলিতে "আলস্যতা" ফাঁস করে দেয় কারণ অলসতার সাথে বাহ্যিক ক্রিয়া থেকে অলসতা উদ্ভূত হয়(নন-টার্মিনেশন বিভাগে উদাহরণটি দেখুন, যেখানে == একটি বাইরের বাইনারি অপারেটর ফাংশন)। এর কারণ হ'ল কপোড্রাক্টাক্টস চূড়ান্ততার সাথে আবদ্ধ থাকে, অর্থাত্ একটি চূড়ান্ত বস্তুর উপর চূড়ান্ত বীজগণিত সহ সংযুক্তিযুক্ত প্রকার [ 11 ]।

    অলস নকশা indeterminism এবং লেটেন্সি এবং স্থান জন্য ফাংশন ডিবাগ ঘটায়, যার মধ্যে ডিবাগিং কারণে সম্ভবত প্রোগ্রামারদের সংখ্যাগরিষ্ঠ ক্ষমতা পরলোক হল মধ্যে অনৈক্য ঘোষিত ফাংশন অনুক্রমের এবং রানটাইম অর্ডার অফ মূল্যায়ন। আগ্রহী দিয়ে মূল্যায়ন করা অলস খাঁটি ফাংশনগুলি রানটাইমে পূর্বে অদেখা অ-সমাপ্তির সম্ভাব্য পরিচয় দিতে পারে। বিপরীতে, অলস সঙ্গে মূল্যায়ন উত্সাহী খাঁটি ফাংশন, সম্ভাব্যভাবে রানটাইমে পূর্বে অদেখা স্থান এবং বিলম্বিতা অনির্দিষ্টকালের পরিচয় দিতে পারে।

অ পরিসমাপ্তি

সংকলন-সময়ে, হালটিং সমস্যা এবং একটি টিউরিং সম্পূর্ণ ভাষায় পারস্পরিক পুনর্বিবেচনার কারণে ফাংশনগুলি সাধারণত সমাপ্তির গ্যারান্টি দেওয়া যায় না।

  • আগ্রহী

    উত্সাহী তবে অলস নয়, Head"এবং" এর সংমিশ্রনের জন্য Tail, যদি হয় Headবা শেষ Tailহয় না তবে যথাক্রমে হয় List( Head(), Tail() ).tail == Tail()বা List( Head(), Tail() ).head == Head()সত্য হয় না কারণ বাম দিকটি না করে এবং ডানদিকটি সমাপ্ত করে।

    যদিও অলসভাবে উভয় পক্ষই সমাপ্ত হয়। এইভাবে আগ্রহী কনজেক্টিভ পণ্যগুলির সাথে অত্যধিক আগ্রহী এবং সেই ক্ষেত্রে যেখানে এটি অপরিহার্য নয় সেগুলিতে অ-টার্মিনেটস (রানটাইম ব্যতিক্রমগুলি সহ)।

  • অলস

    অলস তবে উত্সাহী নয়, 1"বা" এর বিভাজনের জন্য 2, যদি fএটি শেষ হয় না, তবে List( f ? 1 : 2, 3 ).tail == (f ? List( 1, 3 ) : List( 2, 3 )).tailসত্য নয় কারণ বাম দিকটি সমাপ্ত হয়, এবং ডানদিকটি হয় না।

    যদিও উত্সাহের সাথে উভয় পক্ষই সমাপ্ত হয় না তাই সমতা পরীক্ষা কখনও হয় না। সুতরাং অলস বিচ্ছিন্ন কপোড্রুক্টসের সাথে খুব অলস হয় এবং এই ক্ষেত্রে আগ্রহীদের চেয়ে বেশি কাজ করার পরে (রানটাইম ব্যতিক্রম সহ) বন্ধ করতে ব্যর্থ হয়।

[ 10 ] ঘোষিত ঘোষণা এবং ধারাবাহিক দ্বৈততা, ফিলিনস্কি, বিভাগ 2.5.4.4 সিবিভি এবং সিবিএন এর তুলনা এবং এসসিএলে 3.6.1 সিবিভি এবং সিবিএন।

[ ১১ ] ঘোষকীয় ধারাবাহিকতা এবং শ্রেণিবদ্ধ দ্বৈততা, ফিলিনস্কি, বিভাগগুলি ২.২.১ পণ্য এবং কপোড্রাক্টস, ২.২.২ টার্মিনাল এবং প্রাথমিক সামগ্রী, অলস পণ্যগুলির সাথে 2.5.2 সিবিভি এবং উত্সাহী কোপোড্রুক্টসের সাথে 2.5.3 সিবিএন।


এমনকি ঘোষণামূলক সীমাবদ্ধ প্রোগ্রামিংয়ের পরেও সলভার যখন সমাধানটি খুঁজে পাচ্ছেন তখন সীমাবদ্ধতাগুলি পরিবর্তিত হয় না। এটি সুস্পষ্ট কারণ তাদের পরিবর্তনের জন্য সময় নির্দিষ্ট করার কোনও উপায় নেই। এমনকি সল্ভারটি সন্ধান করার আগে চালিত হওয়ার আগে নির্ধারিত প্রতিবন্ধকতাগুলি অন্যান্য প্রতিবন্ধকতাগুলি বলা হয়। এটি স্প্রেডশিটে ঘোষণামূলক সূত্রগুলির সাথে সাদৃশ্য
শেলবি মুর III

3
সংক্ষিপ্ত বিবরণ একটি সংজ্ঞা প্রদান মানে না। যেখানে আমি লিখেছিলাম "আরটি প্রায়শই 'কোনও পার্শ্ব-প্রতিক্রিয়া নয়" "সংক্ষেপিত হয়, এর অর্থ এই নয় যে আরটি-র সংজ্ঞাটি" কোনও পার্শ্ব-প্রতিক্রিয়া নয় ", কারণ লোকেরা' ইফেক্টস 'এর জন্য বিভিন্ন সংজ্ঞা থাকতে পারে। আমি পরিবর্তে যদি বলেছিলাম "আরটি প্রায়শই 'xyz' সংক্ষেপিত হয়, তবে অর্থহীন প্রতীক আরটি-র কোনও সংজ্ঞা দেয় না। আরটিটির একটি সুনির্দিষ্ট সংজ্ঞা রয়েছে যা কখনই পরিবর্তিত হয় না, এটি যে কোনও চিহ্ন ব্যবহার করে তা বোঝায় না।
শেলবি মুর তৃতীয়

আমি আমার দাবির প্রতি-উদাহরণ খুঁজে পাচ্ছি না যে প্রতি ধরণের ডিপি আরটি। উদাহরণস্বরূপ, প্রসঙ্গে সংবেদনশীল ব্যাকরণের শর্তগুলির অর্থ (অর্থাত্ মান) ব্যাকরণের মধ্যে ভিন্ন সময় বা অবস্থানে পরিবর্তিত হয় না। উপরে আমার সীমাবদ্ধ প্রোগ্রামিং মন্তব্য দেখুন।
শেলবি মুর তৃতীয়

1
Equating ESP শৈলী সি রিটুইট রাজ্য একসংখ্যা, সাথে আছেন অবৈধ , কারণ প্রতিটি সি বিবৃতি বিশ্বব্যাপী রাষ্ট্র পরিবর্তন ঘটান পারে, যেহেতু "ভিতরে" অবস্থায় একসংখ্যা প্রতিটি সংশ্লিষ্ট বক্তব্য উত্পন্ন অনুলিপি (তাই পরিবর্তিত) রাষ্ট্রের। দ্বিতীয়টি আরটি - প্রাক্তন নয়। মোনাডিক রচনাটি সর্বদা আরটি হয়। ডিপি == আরটি হ'ল ডিপির একমাত্র অর্থ যা গুণাবলীর একটি বিচ্ছিন্ন সেট (গণিতের প্রমাণ আমি সঠিক, অন্যথায় ডিপি অর্থহীন)।
শেলবি মুর তৃতীয়

1
আমি আশা করি আমি এই প্রথম বাক্যটি বুঝতে পারতাম। আমি ডএএক্সের জন্য ম্যানুয়ালটি পড়ছিলাম যা ইঙ্গিত করে যে এটি একটি 'কার্যকরী ভাষা'। এটার মানে কি? আমি জানি না আপনার পপ জিজ্ঞাসা করুন।
নিক.এমসিডার্মাইড

103

এগুলির জন্য আসলে কোনও অস্পষ্ট, উদ্দেশ্যমূলক সংজ্ঞা নেই। আমি এখানে তাদের সংজ্ঞা দেব :

অনুজ্ঞাসূচক - ফোকাস কি পদক্ষেপ কম্পিউটার কম্পিউটার করব তা বদলে নিতে হবে হয় না (। প্রাক্তন সি, সি ++, জাভা)।

ঘোষণামূলক - কম্পিউটার কীভাবে এটি করা উচিত তার চেয়ে বেশি কী করা উচিত (প্রাক্তন এসকিউএল) এর দিকে ফোকাস।

ক্রিয়ামূলক - ঘোষণামূলক ভাষার একটি উপসেট যা পুনরাবৃত্তির উপর ভারী ফোকাস করে


1
কয়েকটি বিষয় মাথায় রাখুন: ১) ব্যাখ্যাটি সর্ব-সংশ্লেষের চেয়ে সাধারণ হওয়া 2) যেমন আমি বলেছিলাম, এই ভাষাগুলি সংজ্ঞায়নের একাধিক উপায় রয়েছে। সুতরাং, উত্তরটি আপনার পক্ষে খুব ভাল এবং অন্য কারও পক্ষে সঠিক হতে পারে।
জেসন বেকার

3
কার্যকরী প্রোগ্রামিং হয় না "ঘোষণামূলক ভাষায় একটি উপসেট"। ডিক্লারেটিভ প্রোগ্রামিংয়ের জন্য সঞ্চিত মানগুলির অপরিবর্তনীয়তা প্রয়োজন, ক্রিয়ামূলক প্রোগ্রামিং এটি খাঁটি এফপি না হলে হয় না । আমার উত্তর দেখুন । স্প্রেডশিট সেলগুলির ব্যাখ্যাও দেখুন । সঠিক উদ্দেশ্য সংজ্ঞাগুলি "অস্পষ্ট" নয়। জরুরী প্রোগ্রামিং "কম্পিউটার কী করা উচিত" এর উপরও দৃষ্টি নিবদ্ধ করে focused শুধুমাত্র পার্থক্য অনুজ্ঞাসূচক প্রোগ্রামিং চপল সঞ্চিত মান সঙ্গে মোকাবিলা করার জন্য আছে।
শেলবি মুর III

5
@ শেলবিমুরআইআইআই - আমি এরিক মাইজারের সাথে একমত হতে চাই। "অ-খাঁটি কার্যকরী ভাষা" বলে আসলে কিছুই নেই। যতদূর আমি উদ্বিগ্ন, ওকামল, এফ # এবং এর মতো ক্রিয়ামূলক ডেটা স্ট্রাকচার সহ প্রয়োজনীয় ভাষা। তবে আমি আমার উত্তরে যেমন বলেছি, আমি বিশ্বাস করি না যে এই প্রশ্নের কোনও উদ্দেশ্যমূলক, দ্ব্যর্থহীন উত্তর নেই। জিনিস সংজ্ঞায়িত করার একাধিক উপায় রয়েছে।
জেসন বেকার 17

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

21
@ শেলবিমোর III - আমি এই ধারণাটি করছিলাম যে ওপি তার উত্তর ইংরেজিতে চেয়েছিল, ম্যাথ নেরড-এসে নয়। যদি এটি একটি অবৈধ অনুমান ছিল, তবে আমার ক্ষমা চাই।
জেসন বেকার 21

54

অপরিহার্য এবং ঘোষণামূলক প্রোগ্রামিংয়ের দুটি বিপরীত শৈলীর বর্ণনা দেয়। অপরিহার্য হ'ল প্রথাগত "স্টেপ বাই স্টেপ রেসিপি" পদ্ধতির এবং ঘোষণাপত্রটি আরও বেশি "আমি এটিই চাই, এখন আপনি কীভাবে এটি করবেন তা প্রকাশ করুন"।

এই দুটি পদ্ধতির প্রোগ্রামিং জুড়েই ঘটে - এমনকি একই ভাষা এবং একই প্রোগ্রাম সহ। সাধারণত ঘোষিত পদ্ধতির পছন্দনীয় হিসাবে বিবেচনা করা হয়, কারণ এটি প্রোগ্রামারকে অনেক বেশি বিবরণ নির্দিষ্ট করা থেকে মুক্ত করে, তবুও বাগের জন্য কম সুযোগ থাকার কারণে (যদি আপনি যে ফলাফলটি চান তা বর্ণনা করেন এবং কিছু ভাল-পরীক্ষিত স্বয়ংক্রিয় প্রক্রিয়া সেই থেকে পিছন দিকে কাজ করতে পারে) পদক্ষেপগুলি সংজ্ঞায়িত করুন তারপরে আপনি আশা করতে পারেন যে জিনিসগুলি প্রতিটি পদক্ষেপটি হাতছাড়া করার চেয়ে আরও নির্ভরযোগ্য)

অন্যদিকে, একটি অপরিহার্য পদ্ধতি আপনাকে আরও নিম্ন স্তরের নিয়ন্ত্রণ দেয় - এটি প্রোগ্রামিংয়ের "মাইক্রোম্যানেজার অ্যাপ্রোচ"। এবং এটি প্রোগ্রামারকে আরও দক্ষ উত্তর দেওয়ার জন্য সমস্যা সম্পর্কে জ্ঞান কাজে লাগাতে দেয়। সুতরাং কোনও প্রোগ্রামের কিছু অংশকে আরও ঘোষণামূলক স্টাইলে লেখা অসাধারণ নয়, তবে গতি-সমালোচনামূলক অংশগুলি আরও জরুরী।

আপনি যেমন কল্পনা করতে পারেন, প্রোগ্রামটি লেখার জন্য আপনি যে ভাষাটি ব্যবহার করেন তা প্রভাবিত করে আপনি কতটা ঘোষিত হতে পারেন - ফলাফলের বিবরণ দিয়ে কী করা উচিত তা নির্ধারণের জন্য অন্তর্নির্মিত "স্মার্ট" তৈরি করা একটি ভাষা আরও অনেক ঘোষিত ঘোষণা করতে চলেছে একদিকে যেমন প্রোগ্রামারকে প্রথমে শীর্ষে আরও ঘোষিত স্তর তৈরি করতে সক্ষম হওয়ার আগে অপরিহার্য কোড সহ সেই ধরণের বুদ্ধি যুক্ত করতে হয় than সুতরাং, উদাহরণস্বরূপ, প্রোলগের মতো একটি ভাষা খুব ঘোষিত হিসাবে বিবেচিত হয় কারণ এর মধ্যে রয়েছে অন্তর্নির্মিত, এমন একটি প্রক্রিয়া যা উত্তরগুলির সন্ধান করে।

এখনও অবধি, আপনি লক্ষ্য করবেন যে আমি কার্যকরী প্রোগ্রামিংয়ের কথা উল্লেখ করি নি । কারণ এটি এমন একটি শব্দ যার অর্থ অন্য দুটি সাথে অবিলম্বে সম্পর্কিত নয়। এর সর্বাধিক সহজ, কার্যক্ষম প্রোগ্রামিংয়ের অর্থ আপনি ফাংশন ব্যবহার করেন। বিশেষত, আপনি এমন একটি ভাষা ব্যবহার করেন যা "প্রথম শ্রেণীর মান" হিসাবে ফাংশন সমর্থন করে - এর অর্থ এই যে আপনি কেবল ফাংশন লিখতে পারবেন না, তবে আপনি ফাংশনগুলি লিখতে পারেন (যা ফাংশনগুলি লেখেন ...) এবং এতে ফাংশনগুলি পাস করে ফাংশন। সংক্ষেপে - যে ফাংশনগুলি স্ট্রিং এবং সংখ্যার মতো নমনীয় এবং সাধারণ।

এটি অদ্ভুত বলে মনে হতে পারে, তবে সেই কার্যকরী, আবশ্যকীয় এবং ঘোষণামূলক প্রায়শই একসাথে উল্লেখ করা হয়। এর কারণ হ'ল কার্যনির্বাহী প্রোগ্রামিংয়ের ধারণাকে "চূড়ান্ত দিকে নিয়ে যাওয়া" consequ শুদ্ধতম অর্থে একটি ফাংশন, এটি গণিত থেকে কিছু - একটি ধরণের "ব্ল্যাক বক্স" যা কিছু ইনপুট নেয় এবং সর্বদা একই আউটপুট দেয়। এবং এই জাতীয় আচরণের জন্য পরিবর্তনশীলগুলি সংরক্ষণের প্রয়োজন হয় না। সুতরাং আপনি যদি এমন একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ ডিজাইন করেন যার লক্ষ্য কার্যকরী প্রোগ্রামিংয়ের খুব খাঁটি, গাণিতিকভাবে প্রভাবিত ধারণাটি বাস্তবায়িত করা হয় তবে আপনি মূলত মূল্যবোধের ধারণাটি পরিবর্তন করতে পারেন যা একটি নির্দিষ্ট, সীমাবদ্ধ, প্রযুক্তিগত দিক থেকে)।

এবং যদি আপনি এটি করেন - যদি আপনি ভেরিয়েবলগুলি কীভাবে পরিবর্তন করতে পারে তা সীমাবদ্ধ করেন - তবে প্রায় দুর্ঘটনাক্রমে আপনি প্রোগ্রামারকে আরও বেশি ঘোষণামূলক এমন প্রোগ্রামগুলি লিখতে বাধ্য করেন, কারণ অপরিহার্য প্রোগ্রামিংয়ের একটি বড় অংশ বর্ণনা করে যে কীভাবে পরিবর্তনশীল পরিবর্তন হয় এবং আপনি আর পারবেন না কর এটা! সুতরাং এটি কার্যকর হয়েছে যে কার্যকরী প্রোগ্রামিং - বিশেষত, একটি কার্যকরী ভাষায় প্রোগ্রামিং - আরও ঘোষণামূলক কোড দেয় s

সংক্ষেপে, তারপর:

  • আবশ্যকীয় এবং ঘোষণামূলক হ'ল প্রোগ্রামিংয়ের দুটি বিপরীত শৈলী (একই নামগুলি প্রোগ্রামিং ভাষার জন্য ব্যবহৃত হয় যা এই শৈলীগুলিকে উত্সাহ দেয়)

  • ফাংশনাল প্রোগ্রামিং প্রোগ্রামিংয়ের একটি স্টাইল যেখানে ফাংশনগুলি খুব গুরুত্বপূর্ণ হয়ে ওঠে এবং ফলস্বরূপ, পরিবর্তিত মানগুলি কম গুরুত্বপূর্ণ হয়ে ওঠে। মানগুলির পরিবর্তনগুলি নির্দিষ্ট করার সীমাবদ্ধ ক্ষমতা আরও ঘোষণামূলক শৈলীতে বাধ্য করে।

সুতরাং "ক্রিয়ামূলক প্রোগ্রামিং" প্রায়শই "ঘোষিত" হিসাবে বর্ণনা করা হয়।


5
এখন পর্যন্ত সেরা ব্যাখ্যা। দেখে মনে হচ্ছে ফাংশনাল এবং ওওপি অপরিহার্য এবং ঘোষণাপত্রের সংলগ্ন th
দিদিয়ের এ।

আপনি কি বলবেন লজিক প্রোগ্রামিং ঘোষণামূলক? নাকি এটি নিজেই অর্থেগোনাল?
দিদিয়ার এ

51

সংক্ষেপে:

একটি অপরিহার্য ভাষা কম্পিউটার ক্রম অনুসারে চালিত নির্দেশাবলির একটি সিরিজ নির্দিষ্ট করে (এটি করুন, তারপরে এটি করুন)।

কোন বর্ণনামূলক ভাষা কোন ফলাফলগুলি কী ফলাফলগুলি হওয়া উচিত সে সম্পর্কে নিয়মের একটি সেট ঘোষণা করে (উদাহরণস্বরূপ, যদি আপনার A থাকে তবে ফলাফল বি হয়)। একটি ইঞ্জিন ইনপুটগুলিতে এই নিয়মগুলি প্রয়োগ করবে এবং একটি আউটপুট দেবে।

একটি কার্যকরী ভাষা গাণিতিক / লজিক্যাল ফাংশনগুলির একটি সেট ঘোষণা করে যা আউটপুটকে কীভাবে ইনপুট অনুবাদ করা হয় তা নির্ধারণ করে। যেমন। f (y) = y * y। এটি এক প্রকারের ঘোষিত ভাষা।


1
কার্যকরী প্রোগ্রামিং হয় না "ঘোষণামূলক ভাষা এক ধরনের"। ডিক্লারেটিভ প্রোগ্রামিংয়ের জন্য সঞ্চিত মানগুলির অপরিবর্তনীয়তা প্রয়োজন, অশুচি ফাংশনাল প্রোগ্রামিং হ'ল না। আমার উত্তর দেখুন । স্প্রেডশিট সেলগুলির ব্যাখ্যাও দেখুন । শুধুমাত্র কারণ অনুজ্ঞাসূচক যুক্তিবিজ্ঞান (নির্দেশাবলী ওরফে) ক্রমানুসারে চালানো যে চপল সঞ্চিত মান উপস্থিতির কারণে, ফলে মূল্যায়ন অর্ডার উপর নির্ভরশীল নয়। আপনার শব্দভাণ্ডার ব্যবহার করে, একটি "নির্দেশনা" পারস্পরিক পরিবর্তনসমূহের মানগুলিতে পরিচালনা করতে পারে (এবং একটি "বিধি" দিতে পারে না)।
শেলবি মুর III

23

অত্যাবশ্যক: কীভাবে আমাদের লক্ষ্য অর্জন করা যায়

   Take the next customer from a list.
   If the customer lives in Spain, show their details.
   If there are more customers in the list, go to the beginning

ঘোষিত: আমরা কী অর্জন করতে চাই

   Show customer details of every customer living in Spain

আপনি ক্রিয়ামূলক প্রোগ্রামিং বনাম বনাম নন-এফপি বর্ণনা করছেন, ঘোষণামূলক বনাম অত্যাবশ্যক প্রোগ্রামিং নয়। কার্যকরী প্রোগ্রামিং অপরিহার্য এবং ঘোষণামূলক প্রোগ্রামিংয়ের মধ্যে পোলারিটির জন্য অরথোগোনাল। ডিক্লারেটিভ প্রোগ্রামিংয়ের জন্য সঞ্চিত মানগুলির অপরিবর্তনীয়তা প্রয়োজন, অশুচি ফাংশনাল প্রোগ্রামিং হ'ল না। আমার উত্তর দেখুন ।
শেলবি মুর III 3

22

ইমপিটেটিভ প্রোগ্রামিং মানে প্রোগ্রামিংয়ের যে কোনও স্টাইল যেখানে আপনার প্রোগ্রামটি কম্পিউটারের দ্বারা সম্পাদিত ক্রিয়াকলাপ কীভাবে ঘটবে তা বর্ণনা করে নির্দেশাবলীর বাইরে কাঠামোবদ্ধ ।

ডিক্লারেটিভ প্রোগ্রামিং এর অর্থ প্রোগ্রামিংয়ের এমন কোনও স্টাইল যেখানে আপনার প্রোগ্রামটি সমস্যা বা সমাধানের বর্ণনা হিসাবে থাকে - তবে কীভাবে কাজটি হবে তা স্পষ্ট করে জানায় না

ফাংশনাল প্রোগ্রামিং হ'ল ফাংশন এবং ফাংশনগুলির কার্যকারিতা মূল্যায়ন করে প্রোগ্রামিং ... যেমন (কঠোরভাবে সংজ্ঞায়িত) ফাংশনাল প্রোগ্রামিং অর্থ পার্শ্ব-প্রতিক্রিয়া মুক্ত গাণিতিক ক্রিয়াকলাপগুলি সংজ্ঞায়িত করে প্রোগ্রামিং সুতরাং এটি ডিক্যারেটিভ প্রোগ্রামিংয়ের একটি রূপ তবে এটি কেবলমাত্র ঘোষিত প্রোগ্রামিং নয় isn't

লজিক প্রোগ্রামিং (উদাহরণস্বরূপ প্রোলোগে) হ'ল ঘোষিত প্রোগ্রামিংয়ের আরেকটি রূপ। এটি একটি যৌক্তিক বিবৃতি সত্য (বা এটি সন্তুষ্ট হতে পারে কিনা) তা স্থির করে কম্পিউটিং জড়িত। প্রোগ্রামটি সাধারণত তথ্য এবং বিধিগুলির একটি সিরিজ - অর্থ নির্দেশের একটি সিরিজের পরিবর্তে বর্ণনা।

টার্ম রাইটিং (উদাহরণস্বরূপ সিএএসএল) হ'ল ঘোষিত প্রোগ্রামিংয়ের আরেকটি রূপ। এটিতে বীজগণিত পদগুলির প্রতীকী রূপান্তর জড়িত। এটি লজিক প্রোগ্রামিং এবং ফাংশনাল প্রোগ্রামিং থেকে সম্পূর্ণ পৃথক।


কার্যকরী প্রোগ্রামিং হয় না "ঘোষণামূলক প্রোগ্রামিং এর একটি ফর্ম"। ডিক্লারেটিভ প্রোগ্রামিংয়ের জন্য সঞ্চিত মানগুলির অপরিবর্তনীয়তা প্রয়োজন, অশুচি ফাংশনাল প্রোগ্রামিং হ'ল না। আমার উত্তর দেখুন । স্প্রেডশিট সেলগুলির ব্যাখ্যাও দেখুন । "কাজ" কীভাবে করবেন তা "ওয়ার্ক" শব্দটি সংজ্ঞায়িত হয়নি। শুধুমাত্র কারণ অনুজ্ঞাসূচক যুক্তিবিজ্ঞান (ওরফে "নির্দেশিকা") ক্রমানুসারে চালানো যে চপল সঞ্চিত মান উপস্থিতির কারণে, ফলে মূল্যায়ন অর্ডার উপর নির্ভরশীল নয়।
শেলবি মুর III

2
পঠিত হিসেবে যে আমি বিশুদ্ধ কার্যকরী প্রোগ্রামিং সম্পর্কে কথা ছিল অনুগ্রহ করে এটি নিতে । এই দৃষ্টান্তগুলি অতিক্রম করতে পারে এবং আমি হাইব্রিড ভাষার সাথে তুলনা করতে চাই না। তত্ত্বের ক্ষেত্রে কমপক্ষে ফাংশনাল প্রোগ্রামিং হ'ল একটি কম্পিউটার প্রতিটি গণনা কীভাবে সম্পাদন করবে তা বর্ণনা করার চেয়ে ফাংশন সম্পর্কে - তাই আমি এটি বজায় রাখি।
ড্যাফাইড রিস

আমি আমার উত্তরটি সম্পাদনা করেছি এবং "ফাংশনাল প্রোগ্রামিং" বিভাগের অধীনে আমি এমন একটি দৃশ্যাবলী যুক্ত করেছি যেখানে আমরা যুক্তি দিতে পারি যে এফপি সর্বদা খাঁটি থাকে এবং অপরিষ্কার এফপি সত্যই "প্রক্রিয়াজাতীয় প্রোগ্রামিং"। এর আগে এই ব্যাখ্যাটি অন্তর্ভুক্ত না করার জন্য ক্ষমাপ্রার্থী।
শেলবি মুর III

13

আবশ্যক - এক্সপ্রেশন কর্ম সম্পাদনের ক্রম বর্ণনা করে (সংঘবদ্ধ)

ঘোষণাপত্র - এক্সপ্রেশনগুলি হ'ল এমন ঘোষণা যা প্রোগ্রামের আচরণে অবদান রাখে (সাহসী, পরিবর্তনশীল, আদর্শবান্ধব, একঘেয়ে)

ক্রিয়ামূলক - এক্সপ্রেশনটির কেবলমাত্র প্রভাব হিসাবে মূল্য রয়েছে ; শব্দার্থবিজ্ঞান সমীকরণ যুক্তি সমর্থন


1
ঘোষণামূলক এক্সপ্রেশনগুলি প্রোগ্রামের উদ্দেশ্যমূলক আচরণে অবদান রাখে, অনিবার্যভাবে উদ্দেশ্যযুক্ত বা অযৌক্তিকভাবে অবদান রাখতে পারে। এটি ইচ্ছাকৃত শব্দার্থবিজ্ঞান হলে ঘোষণাপত্রের পরিবর্তন ও আদর্শবান হওয়ার দরকার নেই। আমি আপনার কার্যক্ষম সংক্ষিপ্ত সারাংশ পছন্দ, তাই আমি এটি upvated।
শেলবি মুর III

10

যেহেতু আমি আমার পূর্ববর্তী উত্তরটি লিখেছি, আমি ঘোষিত সম্পত্তির একটি নতুন সংজ্ঞা তৈরি করেছি যা নীচে উদ্ধৃত হয়েছে। আমি বাধ্যতামূলক প্রোগ্রামিংকে দ্বৈত সম্পত্তি হিসাবেও সংজ্ঞায়িত করেছি।

এই সংজ্ঞাটি আমার পূর্বের উত্তরে আমি যে সরবরাহ করেছি তার থেকে উচ্চতর, কারণ এটি সংযোগযুক্ত এবং এটি আরও সাধারণ। তবে কুঁচকানো আরও কঠিন হতে পারে, কারণ প্রোগ্রামিং এবং সাধারণভাবে জীবনের ক্ষেত্রে প্রযোজ্য অসম্পূর্ণতা উপপাদ্যের সংমিশ্রণ মানুষের পক্ষে তাদের মনকে চারপাশে গুটিয়ে রাখা কঠিন।

সংজ্ঞার উদ্ধৃত ব্যাখ্যা ঘোষণামূলক প্রোগ্রামিংয়ে খাঁটি কার্যকরী প্রোগ্রামিংয়ের ভূমিকা নিয়ে আলোচনা করে ।

নিম্নোক্ত সংজ্ঞাটি দাবি করে যে তারা দ্বৈত হিসাবে যেহেতু সমস্ত বহিরাগত প্রকারের প্রোগ্রামিং ঘোষিত বনাম আবশ্যকীয়ের নিম্নলিখিত শ্রেণীবদ্ধের সাথে খাপ খায়।

ঘোষণাপত্র বনাম আবশ্যক

ঘোষিত সম্পত্তি হ'ল অদ্ভুত, অবাস্তব এবং প্রযুক্তিগতভাবে সুনির্দিষ্ট সংজ্ঞায়িত করা শক্ত যে এটি সাধারণ এবং দ্ব্যর্থহীন নয়, কারণ এটি একটি নির্বুদ্ধ ধারণা যে আমরা অনিচ্ছাকৃত পার্শ্ব প্রতিক্রিয়া ছাড়াই প্রোগ্রামটির অর্থ (ওরফে শব্দার্থবিজ্ঞান) ঘোষণা করতে পারি। অর্থ প্রকাশ এবং অযৌক্তিক প্রভাবগুলি এড়ানোর মধ্যে একটি সহজাত উত্তেজনা রয়েছে এবং এই টানটি আসলে প্রোগ্রামিং এবং আমাদের মহাবিশ্বের অসম্পূর্ণ উপপাদ্য থেকে উদ্ভূত হয় ।

এটি ওভারসিম্প্লিফিকেশন, প্রযুক্তিগতভাবে অসম্পূর্ণ, এবং " কী করবেন " এবং " কীভাবে করণীয় " হিসাবে আবশ্যকীয় হিসাবে সংজ্ঞাটি সংজ্ঞায়িত করা প্রায়শই অস্পষ্ট । একটি অস্পষ্ট কেস হ'ল " কী " একটি প্রোগ্রামে " কীভাবে " যা কোনও প্রোগ্রামকে ফলাফল দেয় — একটি সংকলক।

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

অসম্পূর্ণতা তত্ত্বগুলি আমাদের মহাবিশ্বের মৌলিক প্রকৃতি থেকে উদ্ভূত, যা থার্মোডিনামিক্সের দ্বিতীয় আইনে বলা হয়েছে যে " এনট্রপি (স্বাধীন সম্ভাবনার # নাম) চিরকাল সর্বাধিক প্রবণতাপ্রবণ "। কোনও প্রোগ্রামের কোডিং এবং নকশাটি কখনই শেষ হয় না - এটি জীবিত! - কারণ এটি একটি বাস্তব বিশ্বের প্রয়োজনকে সম্বোধন করার চেষ্টা করে এবং বাস্তব বিশ্বের শব্দার্থতত্ত্ব সর্বদা পরিবর্তন এবং আরও সম্ভাবনার দিকে ঝোঁক থাকে। মানুষ কখনও নতুন জিনিস আবিষ্কার করা বন্ধ করে না (প্রোগ্রামগুলিতে ত্রুটি সহ ;-)।

এই অদ্ভুত মহাবিশ্বের মধ্যে পূর্ব ও উল্লিখিত পছন্দসই ধারণাটি যথাযথভাবে এবং প্রযুক্তিগতভাবে ক্যাপচারের জন্য, যার কোন প্রান্ত নেই (বিবেচনা করুন! আমাদের মহাবিশ্বের কোনও "বাহ্যিক" নেই) প্রয়োজন, একটি সংক্ষিপ্ত কিন্তু ছদ্মবেশী-সহজ-সংজ্ঞা নেই যা এটি ব্যাখ্যা না করা অবধি ভুল মনে হবে। গভীরভাবে।

সংজ্ঞা:


ঘোষণামূলক সম্পত্তি যেখানে কেবলমাত্র একটি সম্ভাব্য বিবৃতি আছে যা প্রতিটি নির্দিষ্ট মডুলার অর্থ প্রকাশ করতে পারে সেট করতে পারে।

অপরিহার্য সম্পত্তি 3 দ্বৈত, যেখানে শব্দার্থ রচনার অধীনে বেমানান হয় এবং / অথবা বিবৃতিগুলির সেটগুলির বিভিন্নতার সাথে প্রকাশ করা যেতে পারে।


ঘোষণাপত্রের এই সংজ্ঞাটি সিনেমিক স্কোপগুলিতে স্বতন্ত্র স্থানীয় , এর অর্থ এটি যে কোনও মডুলার সিম্যানেটিক যেখানে এবং কীভাবে এটি ইনস্ট্যান্টেড এবং বিশ্বব্যাপী ব্যবস্থায় নিযুক্ত হয়েছে তা নির্বিশেষে তার ধারাবাহিক অর্থ বজায় রাখা দরকার । সুতরাং প্রতিটি ঘোষণামূলক মডিউলার শব্দার্থক শব্দটি সমস্ত সম্ভাব্য অন্যের কাছে অভ্যন্তরীণভাবে অরগনীয় হওয়া উচিত - এবং অসম্ভব নয় (অসম্পূর্ণতা উপপাদনের কারণে) সাক্ষ্যতার ধারাবাহিকতার জন্য গ্লোবাল অ্যালগরিদম বা মডেল, যা রবার্ট হার্পার, অধ্যাপক র ' মোর ইজ অলওয়েজ বেস্ট নন ' পয়েন্টও is স্ট্যান্ডার্ড এমএলের অন্যতম ডিজাইনার কার্নেগি মেলন বিশ্ববিদ্যালয়ের কম্পিউটার সায়েন্সের।

এই modular ঘোষণামূলক শব্দার্থবিদ্যা উদাহরণ বিভাগ তত্ত্ব functors যেমন অন্তর্ভুক্ত , নামমাত্র টাইপিং, নামব্যবধান নাম ক্ষেত্র, এবং wrt তারপর বিশুদ্ধ কার্যকরী প্রোগ্রামিং শব্দার্থবিদ্যা কর্মক্ষম স্তর।Applicative

সুতরাং ভালভাবে ডিজাইন করা ঘোষিত ভাষাগুলি আরও স্পষ্টভাবে অর্থ প্রকাশ করতে পারে, তবে যা প্রকাশ করা যায় তাতে সাধারণতার কিছুটা ক্ষতি থাকলেও স্বতন্ত্র ধারাবাহিকতার সাথে কী প্রকাশ করা যায় তার একটি লাভ।

পূর্বোক্ত সংজ্ঞাটির উদাহরণ হ'ল একটি স্প্রেডশিট প্রোগ্রামের কোষগুলিতে সূত্রের সেট — যা বিভিন্ন কলাম এবং সারি কোষে স্থানান্তরিত হওয়ার সময় একই অর্থ দেবে বলে আশা করা হয় না, যেমন সেল সনাক্তকারীগুলি পরিবর্তিত হয়। ঘর শনাক্তকারীরা উদ্দেশ্যযুক্ত অর্থের অতিরিক্ত এবং অতিরিক্ত নয়। সুতরাং প্রতিটি স্প্রেডশিট ফলাফল সূত্রের একটি সেটে সেল সনাক্তকারীদের কাছে অনন্য রিং। এক্ষেত্রে সামঞ্জস্যপূর্ণ মডুলার সিমেন্টিক হ'ল কোষ সূত্রে খাঁটি ফাংশনগুলির ইনপুট এবং আউটপুট হিসাবে সেল সনাক্তকারীদের ব্যবহার (নীচে দেখুন)।

হাইপার টেক্সট মার্কআপ ল্যাঙ্গুয়েজ ওরফে এইচটিএমএল - স্ট্যাটিক ওয়েব পৃষ্ঠাগুলির জন্য ভাষা— একটি উচ্চারণের (তবে পুরোপুরি 3 নয় ) এমন একটি ঘোষণামূলক ভাষার উদাহরণ যা (কমপক্ষে এইচটিএমএল 5 এর আগে) গতিশীল আচরণ প্রকাশের ক্ষমতা রাখেনি। এইচটিএমএল সম্ভবত শেখার সবচেয়ে সহজ ভাষা। গতিশীল আচরণের জন্য, জাভাস্ক্রিপ্টের মতো একটি আবশ্যকীয় স্ক্রিপ্টিং ভাষা সাধারণত এইচটিএমএল এর সাথে মিলিত হত। জাভাস্ক্রিপ্টবিহীন এইচটিএমএল ঘোষিত সংজ্ঞাটিকে ফিট করে কারণ প্রতিটি নামমাত্র টাইপ (যেমন ট্যাগগুলি) সিনট্যাক্সের বিধিগুলির মধ্যে রচনা অনুসারে তার ধারাবাহিক অর্থ বজায় রাখে।

ঘোষণাপত্রের জন্য একটি প্রতিযোগিতামূলক সংজ্ঞা হ'ল অর্থগত বিবৃতিগুলির ক্রমবর্ধমান এবং আদর্শবান বৈশিষ্ট্য, অর্থাত্ বিবৃতি পরিবর্তন না করে বিবৃতিগুলি পুনরায় সাজানো এবং নকল করা যায়। উদাহরণস্বরূপ, নামযুক্ত ক্ষেত্রগুলিতে মান নির্ধারিত বিবৃতিগুলি প্রোগ্রামটির অর্থ পরিবর্তন না করেই পুনরায় অর্ডার ও ডুপ্লিকেট করা যায়, যদি সেই নামগুলি কোনও অন্তর্নিহিত অর্ডারে মডুলার আর্ট হয়। নামগুলি মাঝে মধ্যে একটি অর্ডার বোঝায়, উদাহরণস্বরূপ সেল সনাক্তকারীরা তাদের কলাম এবং সারি অবস্থান অন্তর্ভুক্ত করে — মোট স্প্রেডশিটে সরানো এর অর্থ পরিবর্তন করে। অন্যথায়, এই বৈশিষ্ট্যগুলির স্পষ্টতই গ্লোবাল প্রয়োজনশব্দার্থবিজ্ঞানের ধারাবাহিকতা। বিবৃতিগুলির শব্দার্থক নকশা করা সাধারণত অসম্ভব তাই এলোমেলোভাবে আদেশ বা নকল করা থাকলে সেগুলি সুসংগত থাকে, কারণ আদেশ এবং সদৃশ শব্দার্থবিজ্ঞানের অন্তর্ভুক্ত। উদাহরণস্বরূপ, "ফু বিদ্যমান আছে" (বা নির্মাণ) এবং "ফু-এর অস্তিত্ব নেই" (এবং ধ্বংস) the যদি কেউ উদ্দেশ্যমূলক শব্দার্থগুলির এলোমেলো অসঙ্গতি স্থানীয় হিসাবে বিবেচনা করে, তবে একজন ঘোষিত সম্পত্তির জন্য এই সংজ্ঞাটিকে যথেষ্ট সাধারণ হিসাবে গ্রহণ করে। সংক্ষেপে এই সংজ্ঞাটি একটি সাধারণীকৃত সংজ্ঞা হিসাবে শূণ্য কারণ এটি শব্দার্থবিজ্ঞানের সাথে ধারাবাহিকতা অরথোগোনাল করার চেষ্টা করে, অর্থাত্ শব্দার্থবিজ্ঞানের মহাবিশ্ব গতিশীলভাবে সীমাহীন এবং এটি বিশ্বব্যাপী সংগতিহীন দৃষ্টান্তে ধরা যায় না ।

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

সি, জাভা, সি ++, সি #, পিএইচপি, এবং জাভাস্ক্রিপ্ট বিশেষভাবে ঘোষণামূলক নয়। কোপুটের সিনট্যাক্স এবং পাইথনের বাক্য গঠন আরও ঘোষণামূলকভাবে অভিজাত ফলাফলের সাথে মিলিত হয় , যেমন ধারাবাহিক সিনট্যাকটিক্যাল শব্দার্থক যা বহিরাগতকে দূর করে দেয় তাই তারা এটিকে ভুলে যাওয়ার পরে সহজেই কোডটি বুঝতে পারে। কপুট এবং হাস্কেল অপারেশনাল শব্দার্থবিজ্ঞানের নির্ধারন প্রয়োগ করে এবং " নিজেকে পুনরাবৃত্তি করবেন না " (ডিআরওয়াই) কে উত্সাহিত করে , কারণ তারা কেবল খাঁটি কার্যকরী দৃষ্টান্তের অনুমতি দেয়।


এমনকি আমরা যেখানে কোনও প্রোগ্রামের শব্দার্থকতা প্রমাণ করতে পারি, যেমন ভাষা কোকের সাথে, এটি টাইপিংয়ে প্রকাশিত শব্দার্থগুলির মধ্যেই সীমাবদ্ধ এবং টাইপিং কখনই কোনও প্রোগ্রামের শব্দার্থক শব্দগুলি ক্যাপচার করতে পারে না — এমনকি ভাষাগুলির জন্যও নয় টিউরিং সম্পূর্ণ নয়, যেমন এইচটিএমএল + সিএসএসের সাহায্যে অসামঞ্জস্যপূর্ণ সংমিশ্রণগুলি প্রকাশ করা সম্ভব যা এইভাবে সংজ্ঞায়িত শব্দার্থবিজ্ঞান রয়েছে।

3 অনেকগুলি ব্যাখ্যা ভুলভাবে দাবি করে যে কেবল আবশ্যক প্রোগ্রামিং সিন্টেক্সিকভাবে বিবৃতি অর্ডার করেছে। অপরিহার্য এবং কার্যকরী প্রোগ্রামিংয়ের মধ্যে এই বিভ্রান্তি আমি স্পষ্ট করেছিলাম । উদাহরণস্বরূপ, এইচটিএমএল বিবৃতিগুলির ক্রম তাদের অর্থের ধারাবাহিকতা হ্রাস করে না।


সম্পাদনা: আমি রবার্ট হার্পারের ব্লগে নিম্নলিখিত মন্তব্যটি পোস্ট করেছি :

ফাংশনাল প্রোগ্রামিংয়ে ... একটি ভেরিয়েবলের পরিবর্তনের পরিসর এক প্রকার

কীভাবে একজন অপরিহার্য প্রোগ্রামিং থেকে কার্যকরী পার্থক্য করে তার উপর নির্ভর করে, একটি অপরিহার্য প্রোগ্রামে আপনার 'কার্যনির্বাহী' তেও এর প্রকরণের পরিবর্তনশীলতার উপর একটি আবদ্ধ রেখে একটি টাইপ থাকতে পারে।

ক্রিয়ামূলক প্রোগ্রামিংয়ের জন্য আমি বর্তমানে কেবলমাত্র দ্বিধাহীন সংজ্ঞাটি বুঝি তা হ'ল) ​​ক) প্রথম শ্রেণীর অবজেক্ট এবং প্রকার হিসাবে ফাংশন, খ) লুপগুলির উপর পুনরাবৃত্তির জন্য অগ্রাধিকার, এবং / অথবা গ) খাঁটি ফাংশন — অর্থাৎ সেই ফাংশন যা পছন্দসই শব্দার্থকে প্রভাবিত করে না স্মৃতিচারণের সময় প্রোগ্রামটির ( পুরোপুরি খাঁটি ফাংশনাল প্রোগ্রামিং অপারেশনাল শব্দার্থক প্রভাবের কারণে উদাহরণস্বরূপ ডেনোটেশনাল শব্দার্থে উপস্থিত নেই, যেমন মেমরি বরাদ্দ )।

একটি খাঁটি ফাংশনটির আদর্শিক সম্পত্তি মানে তার ভেরিয়েবলগুলিতে ফাংশন কলটি তার মান দ্বারা প্রতিস্থাপিত হতে পারে, যা সাধারণত একটি আবশ্যক পদ্ধতির আর্গুমেন্টের ক্ষেত্রে হয় না। খাঁটি ফাংশনগুলি ইনপুট এবং ফলাফলের ধরণের মধ্যে উদ্বেগযুক্ত রাষ্ট্রের রূপান্তরগুলিকে ঘোষণামূলক আর্ট বলে মনে হয়।

তবে খাঁটি ফাংশনগুলির সংমিশ্রণটি এ জাতীয় কোনও ধারাবাহিকতা বজায় রাখে না, কারণ খাঁটি কার্যকরী প্রোগ্রামিং ভাষায় একটি পার্শ্ব-প্রতিক্রিয়া (গ্লোবাল রাষ্ট্র) অপরিহার্য প্রক্রিয়াটির মডেল তৈরি করা সম্ভব, যেমন হাস্কেলের আইওমোনাদ এবং তদুপরি এটি এড়ানো থেকে বিরত থাকা সম্পূর্ণ অসম্ভব is যে কোনও টুরিং সম্পূর্ণ খাঁটি কার্যকরী প্রোগ্রামিং ভাষা।

যেমনটি আমি 2012 সালে লিখেছি যা আপনার সাম্প্রতিক ব্লগে মন্তব্যের একই .কমত্য বলে মনে হয় , ঘোষিত প্রোগ্রামিংটি ধারণাটি বোঝাতে চাইছে যে উদ্দেশ্যে করা শব্দার্থবিজ্ঞান কখনও অস্বচ্ছ নয়। অস্বচ্ছ শব্দার্থবিদ্যার উদাহরণগুলি হ'ল আদেশের উপর নির্ভরতা, অপারেশনাল শব্দার্থক স্তরের উচ্চ স্তরের শব্দার্থসমূহের ক্ষয়ের উপর নির্ভরতা (উদাহরণস্বরূপ কাস্তগুলি রূপান্তর হয় না এবং উচ্চতর স্তরের শব্দার্থকে সীমাবদ্ধ করে জেনেরিকস সীমাবদ্ধ করে ), এবং পরিবর্তনশীল মানগুলির উপর নির্ভরতা যা পরীক্ষা করা যায় না (প্রমাণিত হয়) সঠিক) প্রোগ্রামিং ভাষা দ্বারা।

সুতরাং আমি এই সিদ্ধান্তে পৌঁছেছি যে কেবলমাত্র অ-টিউরিং সম্পূর্ণ ভাষাগুলি ঘোষণামূলক হতে পারে।

সুতরাং একটি ঘোষিত ভাষার একটি দ্ব্যর্থহীন এবং স্বতন্ত্র বৈশিষ্ট্যটি হতে পারে যে এর আউটপুটটি জেনারেটর বিধিগুলির কয়েকটি সংখ্যক সেট মান্য করার পক্ষে প্রমাণিত হতে পারে। উদাহরণস্বরূপ, কোনও নির্দিষ্ট এইচটিএমএল প্রোগ্রামের জন্য (দোভাষী ভিন্ন ভিন্ন উপায়গুলির মধ্যে পার্থক্য উপেক্ষা করে) যা স্ক্রিপ্ট করা হয়নি (যেমন টুরিং সম্পূর্ণ নয়) তার আউটপুট পরিবর্তনশীলতা গণনাযোগ্য হতে পারে। বা আরও সংক্ষেপে একটি এইচটিএমএল প্রোগ্রাম তার পরিবর্তনশীলতার খাঁটি ফাংশন। একটি স্প্রেডশিট প্রোগ্রাম ডিটো এর ইনপুট ভেরিয়েবলগুলির খাঁটি ফাংশন।

সুতরাং এটি আমার কাছে মনে হয় যে ঘোষিত ভাষাগুলি হ'ল সীমাহীন পুনরাবৃত্তির বিরোধী , যেমন গডেলের দ্বিতীয় অসম্পূর্ণতা উপপাদ্য স্ব-রেফারেন্সিয়াল তত্ত্বগুলি প্রমাণ করা যায় না।

লেসি ল্যাম্পোর্ট গডেলের অসম্পূর্ণতা উপপাদাগুলির বিরুদ্ধে প্রোগ্রামিং ভাষার প্রসঙ্গে গণিতের প্রমাণের ক্ষেত্রে প্রকারভেদ এবং যুক্তির (ক্যারি-হাওয়ার্ড চিঠিপত্র ইত্যাদি) মধ্যে একত্র হয়ে কীভাবে কাজ করতে পারে সে সম্পর্কে একটি কল্পকাহিনী লিখেছিলেন


রবার্ট হার্পার ঘোষণাপত্রের বেশিরভাগ সংজ্ঞার অর্থহীনতা সম্পর্কে আমার সাথে একমত হয়েছেন বলে মনে হয় , তবুও আমি মনে করি না যে তিনি আমার উপরের দিকে দেখেছেন। তিনি আমার সংজ্ঞার নিকটে চলে যান যেখানে তিনি ডিনোটেশনাল শব্দার্থবিজ্ঞান নিয়ে আলোচনা করেন, তবুও তিনি আমার সংজ্ঞাটি পান না। মডেল (denotational শব্দার্থবিদ্যা) উচ্চ স্তর
শেলবি মুর III

7

জরুরী প্রোগ্রামিং: "মেশিন" কে কীভাবে কিছু করা যায় তা বলা এবং ফলস্বরূপ আপনি যা ঘটতে চান তা ঘটবে।

ডিক্লারেটিভ প্রোগ্রামিং: আপনি কী হতে চান তা "মেশিনকে" জানান এবং এটি কীভাবে করা যায় তা কম্পিউটারকে জানানো।

জরুরী উদাহরণ

function makeWidget(options) {
    const element = document.createElement('div');
    element.style.backgroundColor = options.bgColor;
    element.style.width = options.width;
    element.style.height = options.height;
    element.textContent = options.txt;

    return element;
}

ঘোষণাপত্রের উদাহরণ

function makeWidget(type, txt) {
    return new Element(type, txt);
}

দ্রষ্টব্য: পার্থক্যটি কোন একতা বা জটিলতা বা বিমূর্ততা নয়। যেমন বলা হয়েছে, পার্থক্যটি কীভাবে বনাম কী


2
ভাল তবে তবে আরও ভাল যদি আপনি উভয়ের জন্য কমপক্ষে একটি উদাহরণ সরবরাহ করেন!
পারদীপ জৈন

4

আজকাল, নতুন ফোকাস: আমাদের পুরানো শ্রেণিবিন্যাস দরকার?

অনুজ্ঞাসূচক / ঘোষণামূলক / প্রায়োগিক দিক অতীতে ভাল জেনেরিক ভাষায় শ্রেণীভুক্ত করতে ছিল, কিন্তু আজকাল সব "বিগ ভাষা" কিছু বিকল্প (সাধারণত আছে (জাভা, পাইথন, জাভাস্ক্রীপ্ট, ইত্যাদি) অবকাঠামো ) "অন্যান্য ফোকাস" সঙ্গে প্রকাশ করার এর প্রধান একের তুলনায় (সাধারণ আবশ্যক), এবং সমান্তরাল প্রক্রিয়া, ঘোষণামূলক ফাংশন, ল্যাম্বডাস ইত্যাদি প্রকাশ করা

সুতরাং এই প্রশ্নের একটি ভাল বৈকল্পিক হ'ল "আজ ফ্রেমওয়ার্কগুলি শ্রেণীবদ্ধ করার পক্ষে কোন দিকটি ভাল?" ... একটি গুরুত্বপূর্ণ বিষয় এমন একটি বিষয় যা আমরা "প্রোগ্রামিং স্টাইল" লেবেল করতে পারি ...

অ্যালগরিদম সহ ডেটা ফিউশন উপর ফোকাস

একটি ভাল উদাহরণ ব্যাখ্যা করার জন্য। আপনি উইকিপিডিয়ায় jQuery সম্পর্কে পড়তে পারেন ,

JQuery কোর বৈশিষ্ট্যগুলির সেট - DOM উপাদান নির্বাচন, ট্রভারসাল এবং ম্যানিপুলেশন -, এর নির্বাচক ইঞ্জিন (...) দ্বারা সক্ষম, একটি নতুন "প্রোগ্রামিং শৈলী" তৈরি করেছে, অ্যালগরিদম এবং ডিওএম-ডেটা-কাঠামোকে ফিউজ করে

সুতরাং jQuery হ'ল "নতুন প্রোগ্রামিং শৈলীতে" কেন্দ্রীভূত করার সেরা (জনপ্রিয়) উদাহরণ , এটি কেবলমাত্র অবজেক্ট অরিয়েন্টেশন নয়, এটি হ'ল " ফিউজিং অ্যালগরিদম এবং ডেটা-কাঠামো "। jQuery স্প্রেডশিট হিসাবে কিছুটা প্রতিক্রিয়াশীল, কিন্তু "সেল-ওরিয়েন্টেড" নয়, এটি " ডোম-নোড ওরিয়েন্টেড " ... এই প্রসঙ্গে মূল শৈলীর তুলনা :

  1. কোন লয় : সমস্ত "বিগ ভাষাগুলিতে" যে কোনো প্রায়োগিক / ঘোষণামূলক / অনুজ্ঞাসূচক এক্সপ্রেশনে স্বাভাবিক ডেটা এবং আলগোরিদিম "কোন লয়", কয়েকটি অবজেক্ট স্থিতিবিন্যাস, একটি হল যে ছাড়া লয় মধ্যে কঠোর algebric গঠন দৃষ্টিকোণ।

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

  3. বিগ লয় : হয় "jQuery এর শৈলী" ... jQuery এর একটি ডোমেন নির্দিষ্ট ভাষা "উপর মনোযোগ নিবদ্ধ fusing আলগোরিদিম ও করে DOM-ডেটা-স্ট্রাকচার "।
    পিএস: এক্সকিউরি হিসাবে অন্যান্য "ক্যোয়ারী ল্যাঙ্গুয়েজ", এসকিউএল (অত্যাবশ্যক এক্সপ্রেশন বিকল্প হিসাবে পিএল সহ) এছাড়াও তথ্য-অ্যালগোরিদ-ফিউশন উদাহরণ, তবে তারা দ্বীপপুঞ্জ , অন্য সিস্টেম মডিউলগুলির সাথে কোনও ফিউশন নেই ... বসন্ত , যখন find()বিভিন্নগুলি ব্যবহার করে এবং স্পেসিফিকেশন ক্লজগুলি হ'ল আরেকটি ভাল ফিউশন উদাহরণ।


3

ডিক্লারেটিভ প্রোগ্রামিং প্রোগ্রামিং হয় ইনপুট এবং আউটপুট মধ্যে কিছু কালজয়ী যুক্তি প্রকাশ করে উদাহরণস্বরূপ, সিউডোকোডে, নিম্নলিখিত উদাহরণটি ঘোষণামূলক হবে:

def factorial(n):
  if n < 2:
    return 1
  else:
    return factorial(n-1)

output = factorial(argvec[0])

আমরা এখানে 'ফ্যাকটোরিয়াল' নামক একটি সম্পর্ককে সংজ্ঞায়িত করেছি এবং আউটপুট এবং ইনপুটগুলির মধ্যে সম্পর্কটিকে সেই সম্পর্ক হিসাবে সংজ্ঞায়িত করেছি। এখানে যেমন স্পষ্ট হওয়া উচিত, যে কোনও কাঠামোগত ভাষা সম্পর্কে ডিক্লেয়ারেশনাল প্রোগ্রামিং কিছুটা বাড়িয়ে দেয়। ঘোষিত প্রোগ্রামিংয়ের কেন্দ্রীয় ধারণা হ'ল অপরিবর্তনীয় ডেটা, আপনি যদি কোনও ভেরিয়েবলকে অর্পণ করেন, আপনি কেবল একবার এটি করেন এবং তারপরে আর কখনও না। অন্যান্য, কঠোর সংজ্ঞাগুলিতে জোর দেওয়া হয় যে কোনওভাবেই কোনও পার্শ্ব-প্রতিক্রিয়া নাও হতে পারে, এই ভাষাগুলিকে কিছু সময় 'খাঁটি ঘোষণামূলক' বলা হয়।

অপরিহার্য শৈলীতে একই ফলটি হ'ল:

a = 1
b = argvec[0]
while(b < 2):
  a * b--

output = a

এই উদাহরণে, আমরা ইনপুট এবং আউটপুটটির মধ্যে কোনও নিরবধি স্থিতিক যৌক্তিক সম্পর্ক প্রকাশ করি নি, আমরা মেমরির ঠিকানাগুলিকে ম্যানুয়ালি পরিবর্তিত করেছি যতক্ষণ না তাদের একটি পছন্দসই ফলাফল না ধরে। এটা স্পষ্ট হওয়া উচিত যে সমস্ত ভাষাগুলি ঘোষণামূলক শব্দার্থতাকে কিছুটা প্রসারিত করার অনুমতি দেয় তবে সমস্ত জরুরী নয়, কিছু 'খাঁটি' ঘোষিত ভাষাগুলি পার্শ্ব প্রতিক্রিয়া এবং মিউটেশনকে পুরোপুরি অনুমতি দেয়।

ঘোষিত ভাষাগুলি প্রায়শই 'কী করা উচিত' নির্দিষ্ট করার জন্য বলা হয়, 'এটি কীভাবে করা যায়' এর বিপরীতে, আমি মনে করি এটি একটি মিসনোমার, ঘোষণামূলক প্রোগ্রামগুলি এখনও নির্দিষ্ট করে যে কীভাবে একটি ইনপুট থেকে আউটপুট পেতে হবে, তবে অন্যভাবে, আপনার যে সম্পর্কটি নির্দিষ্ট করা হয়েছে তা অবশ্যই কার্যকরভাবে গণনাযোগ্য (গুরুত্বপূর্ণ শব্দটি, আপনি যদি তা জানেন না তবে এটি সন্ধান করুন)। আরেকটি পদ্ধতি হ'ল ননডেটেরিম্যানস্টিক প্রোগ্রামিং, যা বাস্তবায়িত করে কেবল কোন পরিস্থিতিতে কোন ফলাফলের সাথে মিলিত হয় কেবল তার প্রয়োগটি সফল না হওয়া অবধি পরীক্ষার এবং ত্রুটির সমস্ত পথ সরিয়ে দেওয়ার আগে implementation

বিশুদ্ধভাবে ঘোষিত ভাষাগুলির মধ্যে হাস্কেল এবং খাঁটি প্রোলোগ অন্তর্ভুক্ত। এক থেকে অন্যটিতে একটি স্লাইডিং স্কেল হবে: খাঁটি প্রোলগ, হাস্কেল, ওক্যামল, স্কিম / লিস্প, পাইথন, জাভাস্ক্রিপ্ট, সি -, পার্ল, পিএইচপি, সি ++, পাসক্যাল, সি, ফোর্টরান, অ্যাসেম্বলি


আপনি কার্যকরী প্রোগ্রামিং সংজ্ঞায়িত করেন নি। আপনি ভুলভাবে প্ররোচিত করেছেন, "কিছু 'খাঁটি' ঘোষণামূলক ভাষাগুলি", যে ঘোষণামূলক প্রোগ্রামিং অপরিষ্কার হতে পারে । ডিক্লারেটিভ প্রোগ্রামিংয়ের জন্য সঞ্চিত মানগুলির অপরিবর্তনীয়তা প্রয়োজন, অত্যাবশ্যক প্রোগ্রামিং হয় না। আমার উত্তর দেখুন । অপরিবর্তনীয়তা "কালজয়ী" গুণ - এটি দেখুন যে আপনার ঘোষণাপত্রে factorialকোনও মান রূপান্তরিত হয় না।
শেলবি মুর III

3

এখানে উল্লেখযোগ্য "প্রকারগুলি" সম্পর্কিত কয়েকটি ভাল উত্তর।

আমি প্রায়শই কার্যকরী প্রোগ্রামিং ভিড়ের সাথে যুক্ত কিছু অতিরিক্ত, আরও "বহিরাগত" ধারণা জমা দিই:

  • ডোমেন সুনির্দিষ্ট ভাষা বা ডিএসএল প্রোগ্রামিং: হাতে সমস্যা মোকাবেলায় একটি নতুন ভাষা তৈরি করা।
  • মেটা-প্রোগ্রামিং : যখন আপনার প্রোগ্রামটি অন্যান্য প্রোগ্রাম লেখেন।
  • বিবর্তনমূলক প্রোগ্রামিং : যেখানে আপনি এমন একটি সিস্টেম তৈরি করেন যা ক্রমাগত নিজেকে উন্নত করে বা উপ-প্রোগ্রামগুলির ধারাবাহিকভাবে আরও ভাল প্রজন্ম উৎপন্ন করে।

3

আমি মনে করি যে আপনার শ্রেনীটি ভুল। দুটি বিপরীত প্রবণতা আবশ্যক এবং ঘোষণামূলক। ফাংশনাল কেবলমাত্র ঘোষণার একটি উপ-প্রকার। বিটিডাব্লু, উইকিপিডিয়া একই তথ্য জানায়।


+1: হ্যাঁ, দৃষ্টান্তগুলি হ'ল আপেল এবং কমলা।
নিখিল চেলিয়াহ

FP হয় না "শুধু ঘোষণামূলক একটি উপপ্রকার"। এফপি অত্যাবশ্যক বনাম ডিপির ধনাত্মকতার জন্য অরথোগোনাল। ডিপিকে সঞ্চিত মানগুলির অপরিবর্তনীয়তা প্রয়োজন , অপরিষ্কার এফপি তা দেয় না। উইকিপিডিয়া খাঁটি এফপিকে এফপি দিয়ে বিভ্রান্ত করছে, অবাস্তব দাবী করে যে নিম্নলিখিত ধারণাগুলি "অপরিহার্য প্রোগ্রামিংয়ের জন্য সাধারণত বিদেশী": প্রথম শ্রেণির ফাংশন, পুনরাবৃত্তি, মূল্যায়ন আদেশ এবং স্থির টাইপিং। তারপরে উইকিপিডিয়া অপরিচিত "অ-কার্যকরী ভাষায় ফাংশনাল প্রোগ্রামিং" স্বীকার করে ।
শেলবি মুর III

উইকিপিডিয়া এই বিষয়টিতে ভুল। অনেক জনপ্রিয় কার্যকরী ভাষা যদি আপনি চয়ন করেন তবে ঘোষিত ভাষাগুলি না হলে "ঘোষিত স্টাইল" তে প্রোগ্রামিং করার অনুমতি দেয়। তবে সি সম্পর্কে একই কথা বলা যেতে পারে, যেখানে আপনি যদি অকার্যকর * গুলি ব্যবহার করে বেছে বেছে ফাংশনাল স্টাইলে প্রোগ্রাম করতে পারেন।
প্লাইংক্স

সম্ভবত, আমার এই বিষয়টিতে আরও স্পষ্ট হওয়া উচিত ছিল, তবে অন্য দিক থেকে, আমি বেশ প্রাসঙ্গিক (ইমো) বিশদ বিশৃঙ্খলা বিশৃঙ্খলা বিশৃঙ্খলা বিশৃঙ্খলা নিয়ে যাচ্ছি না। আমি দেখতে পাচ্ছি যে কার্যকরী ভাষাগুলি ঘোষণামূলকভাবে ব্যবহার করা হয়। আপনি ASM বা C তে ঘোষিতভাবে এবং / অথবা কার্যকরীভাবে লেখার চেষ্টা করতে পারেন বা আপনি সম্ভবত লিপ্পে জরুরী প্রোগ্রামটি লিখতে পারেন তবে আমার সন্দেহ যে প্রশ্ন লেখকের পক্ষে এটি খুব সহায়ক বা তথ্যমূলক হবে। সুতরাং সংক্ষেপে আমি এখনও আমার উত্তরটিকে যথাযথ বিবেচনা করি, এমনকি যদি এটি আলাদাভাবে শব্দযুক্তও করা যায়।
রিক 10

2

সংক্ষেপে, একটি প্রোগ্রামিং শৈলী আরও কীভাবে (এটি করতে হবে) তার বিবরণটিকে কীভাবে (এটি করতে হবে) তার বিস্তৃতকরণের উপর জোর দেয় যাতে আরও স্টাইলটি ঘোষণামূলক হিসাবে বিবেচিত হয়। বিপরীতটি অপরিহার্য ক্ষেত্রে সত্য। ক্রিয়ামূলক প্রোগ্রামিং ঘোষিত স্টাইলের সাথে সম্পর্কিত।


অন্যান্য উত্তর নীচে আমার মন্তব্য দেখুন। এফপি সর্বদা ঘোষণামূলক হয় না। কী বনাম কীভাবে আইপি বনাম ডিপি-র জন্য ভুল শ্রেণীবদ্ধ হয়, কারণ ডিপি এবং আইপি উভয়ই যুক্তিযুক্ত যা কী এবং কীভাবে জড়িত।
শেলবি মুর III
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.