অপরিচ্ছন্নতা বা পরিবর্তন হ'ল এমন ধারণা নয় যা কার্যকরী প্রোগ্রামিংয়ে বোঝায়।
গণনা প্রসঙ্গে
এটি একটি খুব ভাল প্রশ্ন যা অন্য একটি সাম্প্রতিক প্রশ্নের আকর্ষণীয় ফলোআপ (ডুপ্লিকেট নয়): অ্যাসাইনমেন্ট, মূল্যায়ন এবং নামকরণের মধ্যে পার্থক্য কী?
বরং একের পর এক আপনার জবাবের জবাব দেওয়ার জন্য, আমি এখানে কী চেষ্টা করছি তার একটি কাঠামোগত ওভারভিউ দেওয়ার চেষ্টা করছি।
আপনাকে উত্তর দেওয়ার জন্য কয়েকটি বিষয় বিবেচনা করতে হবে, যার মধ্যে রয়েছে:
কার্যকরী প্রোগ্রামিং শৈলীটি নির্বোধ বলে মনে হয় কারণ আপনি এটিকে একটি অত্যাবশ্যক প্রোগ্রামার চোখে দেখে। তবে এটি একটি পৃথক দৃষ্টান্ত, এবং আপনার অপরিহার্য ধারণা এবং উপলব্ধি স্থানের বাইরে ien সংকলকগুলির এ জাতীয় কোনও পূর্বনির্ধারণ নেই।
তবে শেষের উপসংহারটি হ'ল মেশিন লার্নিং সহ বিশুদ্ধভাবে কার্যকরী উপায়ে প্রোগ্রামগুলি লেখা সম্ভব, চিন্তার ফাংশনাল প্রোগ্রামিংয়ে ডেটা সংরক্ষণ করার ধারণা নেই। আমি অন্যান্য উত্তরের সাথে এই বিষয়টিতে একমত নই বলে মনে হচ্ছে।
আশা করি এই উত্তরটির দৈর্ঘ্য সত্ত্বেও কয়েকজন আগ্রহী হবেন।
গণনার দৃষ্টান্ত
প্রশ্নটি ফাংশনাল প্রোগ্রামিং (ওরফে অ্যাপ্লিটিভ প্রোগ্রামিং) সম্পর্কিত, গণনার একটি নির্দিষ্ট মডেল, যার তাত্ত্বিক এবং সরলতম প্রতিনিধি লাম্বদা ক্যালকুলাস।
আপনি যদি তাত্ত্বিক স্তরে থাকেন তবে গণনার অনেকগুলি মডেল রয়েছে: টুরিং মেশিন (টিএম), র্যাম মেশিন এবং অন্যান্য , ল্যাম্বডা ক্যালকুলাস, সংযুক্তি যুক্তি, পুনরাবৃত্ত ফাংশন তত্ত্ব, আধা-থিউ সিস্টেম ইত্যাদি আরও শক্তিশালী গণনা মডেলরা তাদেরকে কী সম্বোধন করতে পারে তার সমতুল্য প্রমাণিত হয়েছে এবং এটি
চার্চ-টিউরিং থিসিসের সূত্র ।
একটি গুরুত্বপূর্ণ ধারণা একে অপরের সাথে মডেল হ্রাস করা, যা চার্চ-টিউরিং থিসিসের দিকে পরিচালিত সমতাগুলি প্রতিষ্ঠার ভিত্তি। প্রোগ্রামারদের দৃষ্টিকোণ থেকে দেখা যায়, একটি মডেলকে অন্যটিতে হ্রাস করা প্রায়শই যা সাধারণত একটি সংকলক বলে। আপনি যদি লজিক প্রোগ্রামিংটিকে গণনার মডেল হিসাবে গ্রহণ করেন তবে এটি কোনও পিসি আপনার কোনও দোকানে কিনে দেওয়া মডেল থেকে একেবারেই আলাদা এবং সংকলকটি আপনার পিসি দ্বারা উপস্থাপিত কম্পিউটেশনাল মডেলটিতে লজিক প্রোগ্রামিং ভাষায় লিখিত প্রোগ্রামগুলি অনুবাদ করে pretty র্যাম কম্পিউটার)।
তবে, এর অর্থ এই নয় যে দুটি মডেল একই জিনিসগুলি করে বা একের জন্য অর্থপূর্ণ ধারণাটি অন্যটিতে স্থানান্তরিত হতে পারে। সাধারণত, একটি টিএম এর একটি গণনা পদক্ষেপের সাথে একটি (β-) ল্যাম্বদা ক্যালকুলাসে হ্রাস পদক্ষেপ, যদিও তারা আন্তঃ অনুবাদযোগ্য। ল্যাম্বডা এক্সপ্রেশনটির সর্বোত্তম মূল্যায়নের ধারণা টিএম মডেলের জটিলতার সমস্যা থেকে বেশ দূরে।
অনুশীলনে, আমরা যে প্রোগ্রামিং ভাষাগুলি ব্যবহার করি সেগুলি বিভিন্ন তাত্ত্বিক উত্স থেকে ধারণাগুলি মিশ্রিত করে, এটি করার চেষ্টা করে যাতে কোনও প্রোগ্রামের নির্বাচিত অংশগুলি উপযুক্ত যেখানে কোনও মডেলের বৈশিষ্ট্যগুলি থেকে উপকৃত হতে পারে। একইভাবে, সিস্টেম বিল্ডিংয়ের লোকেরা হাতের কাজটির সাথে ভাষার উপযুক্ত অনুসারে বিভিন্ন উপাদানগুলির জন্য বিভিন্ন ভাষা বেছে নিতে পারে।
অতএব, আপনি খুব কমই একটি প্রোগ্রামিং ভাষায় খাঁটি অবস্থায় একটি প্রোগ্রামিং দৃষ্টান্ত দেখতে পান। প্রোগ্রামিং ভাষাগুলি এখনও প্রভাবশালী দৃষ্টান্ত অনুযায়ী শ্রেণিবদ্ধ করা হয়, তবে অন্যান্য দৃষ্টান্তের ধারণাগুলি জড়িত থাকলে প্রায়শই অস্পষ্টতা এবং ধারণাগত সমস্যাগুলিকে ঝাপসা করে যখন ভাষার বৈশিষ্ট্যগুলি প্রভাবিত হতে পারে।
সাধারণত, হাস্কেল এবং এমএল বা সিএএমএল এর মতো ভাষাগুলিকে কার্যকরী হিসাবে বিবেচনা করা হয়, তবে তারা অত্যাবশ্যক আচরণের অনুমতি দিতে পারে ... অন্যথায় কেন " বিশুদ্ধভাবে কার্যকরী উপসেট " সম্পর্কে কথা বলা হবে ?
তারপরে যে কেউ দাবি করতে পারে যে আপনি আমার ক্রিয়াকলাপের প্রোগ্রামিং ভাষায় এটি করতে পারেন বা এটি করতে পারেন, তবে অতিরিক্ত ক্রিয়ামূলক হিসাবে বিবেচনা করা যেতে পারে এমন কিছুর উপর নির্ভর করে যখন এটি কার্যকরী প্রোগ্রামিংয়ের কোনও প্রশ্নের উত্তর দিচ্ছে না তখন।
উত্তরগুলি অতিরিক্ত ছাড়াই একটি নির্দিষ্ট দৃষ্টান্তের সাথে আরও স্পষ্টভাবে সম্পর্কিত হওয়া উচিত।
একটি পরিবর্তনশীল কি?
আরেকটি সমস্যা হ'ল পরিভাষা ব্যবহার। গণিতে একটি চলক একটি সত্তা যা কিছু ডোমেনে একটি নির্ধারিত মানের জন্য দাঁড়ায়। এটি বিভিন্ন কাজে ব্যবহৃত হয়। একটি সমীকরণ ব্যবহৃত হয়, এটি সমীকরণ যাচাই করা হয় যে যেমন মান জন্য দাঁড়িয়ে থাকতে পারে। এই দৃষ্টিভঙ্গিটি লজিক প্রোগ্রামিংয়ে " লজিকাল ভেরিয়েবল " নামে ব্যবহৃত হয় , সম্ভবত যুক্তিযুক্ত প্রোগ্রামিং বিকাশকালে নামের ভেরিয়েবলটির ইতিমধ্যে অন্য অর্থ ছিল।
Traditionalতিহ্যগত অপরিহার্য প্রোগ্রামিংয়ে, একটি পরিবর্তনশীল কোনও ধরণের ধারক (বা মেমরি অবস্থান) হিসাবে বোঝা যায় যা কোনও মানের উপস্থাপনা মুখস্ত করতে পারে এবং সম্ভবত এর বর্তমান মানটি অন্য একটি দ্বারা প্রতিস্থাপন করতে পারে)।
ফাংশনাল প্রোগ্রামিংয়ে, কোনও ভেরিয়েবলের একই উদ্দেশ্য থাকে এটি গণিতে কিছু মূল্য হিসাবে স্থানধারক হিসাবে থাকে তবে এখনও সরবরাহ করা যায় না। ঐতিহ্যগত অনুজ্ঞাসূচক প্রোগ্রামিং এই ভূমিকা আসলে ধ্রুবক চরিত্রে অভিনয় করা হয় (সঙ্গে গুলিয়ে ফেলা যাবে না লিটারেল যা নির্ধারিত মান মূল্যবোধের যে ডোমেনে একটি স্বরলিপি নির্দিষ্ট সঙ্গে প্রকাশ করা হয়, যেমন 123, সত্য, [ "abdcz", 3.14])।
ধ্রুবক হিসাবে যে কোনও প্রকারের ভেরিয়েবলগুলি সনাক্তকারীদের দ্বারা উপস্থাপিত হতে পারে।
অপরিহার্য পরিবর্তনশীল এর মান পরিবর্তন করতে পারে এবং এটি হ'ল পরিবর্তনের ভিত্তি। ক্রিয়ামূলক পরিবর্তনশীল পারে না cannot
প্রোগ্রামিং ভাষাগুলি সাধারণত বৃহত্তর সত্তাগুলি ভাষার ছোট থেকে তৈরি করতে দেয়।
অপরিহার্য ভাষাগুলি এ জাতীয় নির্মাণগুলিকে ভেরিয়েবলগুলি অন্তর্ভুক্ত করার অনুমতি দেয় এবং এটিই আপনাকে পরিবর্তনীয় ডেটা দেয়।
কিভাবে একটি প্রোগ্রাম পড়তে হয়
একটি প্রোগ্রামটি মৌলিকভাবে আপনার অ্যালগরিদমের বিমূর্ত বর্ণনামূলক কিছু ভাষা হয়, বাস্তববাদী নকশাকেন্দ্রিক বা উপমা হিসাবে বিশুদ্ধ ভাষা whether
নীতিগতভাবে, আপনি বিবৃতির বিমূর্ত অর্থ বোঝাতে চাইছে এর জন্য প্রতিটি বিবৃতি নিতে পারেন। তারপরে সংকলক কম্পিউটারটিকে কার্যকর করার জন্য কিছু উপযুক্ত ফর্মটিতে অনুবাদ করবে, তবে এটি প্রথম অনুমানের ক্ষেত্রে আপনার সমস্যা নয়।
অবশ্যই, বাস্তবতাটি কিছুটা কঠোর, এবং এমন কাঠামো এড়ানোর জন্য কী ঘটেছিল সে সম্পর্কে প্রায়শই ধারণা রাখা ভাল যা সংকলক দক্ষ কার্য সম্পাদনের জন্য কীভাবে মোকাবেলা করতে পারে তা জানতে পারে না। তবে এটি ইতিমধ্যে অপটিমাইজেশন ... যা সংকলকগুলি প্রোগ্রামারগুলির চেয়ে প্রায়শই ভাল।
কার্যকরী প্রোগ্রামিং এবং পরিবর্তন
মিউটেবিলিটি হ'ল বাধ্যতামূলক ভেরিয়েবলগুলির অস্তিত্বের উপর ভিত্তি করে যা মূল্য থাকতে পারে, তাকে নিয়োগ দ্বারা পরিবর্তন করতে হবে। যেহেতু এগুলি কার্যকরী প্রোগ্রামিংয়ে বিদ্যমান নেই তাই সমস্ত কিছুই অপরিবর্তনীয় হিসাবে দেখা যেতে পারে।
কল্পিত প্রোগ্রামিং মানগুলির সাথে একচেটিয়াভাবে আচরণ করে।
অপরিবর্তনীয়তার বিষয়ে আপনার প্রথম চারটি বক্তব্য বেশিরভাগ ক্ষেত্রে সঠিক, তবে জরুরী দৃষ্টিভঙ্গি দিয়ে এমন কিছু বর্ণনা করুন যা অপরিহার্য নয়। এটি এমন এক রঙে বর্ণের মতো যা পৃথিবীতে প্রত্যেকে অন্ধ। আপনি এমন ধারণাগুলি ব্যবহার করছেন যা কার্যক্ষম প্রোগ্রামিংয়ের জন্য এলিয়েন।
আপনার কেবল খাঁটি মান রয়েছে এবং পূর্ণসংখ্যার একটি অ্যারের খাঁটি মান। অন্য একটি অ্যারে যা কেবল একটি উপাদানের মধ্যে পৃথক রয়েছে তা পেতে আপনাকে আলাদা অ্যারে মান ব্যবহার করতে হবে। উপাদান পরিবর্তন করা কেবল একটি ধারণা যা এই প্রসঙ্গে নেই। আপনার একটি ফাংশন থাকতে পারে যার মধ্যে একটি অ্যারে রয়েছে এবং কিছু সূচি যুক্তি হিসাবে রয়েছে, এবং এমন একটি ফলাফল প্রদান করে যা প্রায় অনুরূপ অ্যারে যা কেবল সূচকগুলি দ্বারা নির্দেশিত যেখানে পৃথক হয়। তবে এটি এখনও একটি স্বতন্ত্র অ্যারে মান। এই মানটি কীভাবে উপস্থাপিত হয় তা আপনার সমস্যা নয়। সম্ভবত তারা কম্পিউটারের অপরিহার্য অনুবাদে অনেকগুলি "ভাগ" করেন ... তবে এটি সংকলকের কাজ ... এবং এটি কী ধরনের মেশিন আর্কিটেকচার সংকলন করছে তা আপনি জানতেও চান না।
আপনি মানগুলি অনুলিপি করবেন না (এটি কোনও অর্থ দেয় না, এটি একটি এলিয়েন ধারণা)। আপনি কেবলমাত্র আপনার প্রোগ্রামে সংজ্ঞায়িত ডোমেনগুলিতে বিদ্যমান মানগুলি ব্যবহার করেন। হয় আপনি সেগুলি বর্ণনা করুন (আক্ষরিক হিসাবে) বা এগুলি কোনও অন্য মানগুলিতে কোনও ফাংশন প্রয়োগের ফলাফল। প্রোগ্রামে বিভিন্ন স্থানে একই মান ব্যবহার করা হচ্ছে তা নিশ্চিত করার জন্য আপনি তাদের একটি নাম দিতে পারেন (এভাবে ধ্রুবককে সংজ্ঞায়িত করে)। নোট করুন যে ফাংশন অ্যাপ্লিকেশনটি গণনা হিসাবে বোঝা উচিত নয় তবে প্রদত্ত যুক্তিগুলিতে প্রয়োগের ফলাফল হিসাবে। লেখা 5+2
বা লেখার 7
সমান amounts যা পূর্বের অনুচ্ছেদের সাথে সামঞ্জস্যপূর্ণ।
কোনও অপরিহার্য ভেরিয়েবল নেই। কোনও অ্যাসাইনমেন্ট সম্ভব নয়। আপনি নামগুলি কেবলমাত্র মানগুলিতে আবদ্ধ করতে পারেন (ধ্রুবক গঠনের জন্য), অপরিহার্য ভাষাগুলির থেকে ভিন্ন যেখানে আপনি নামগুলি ভেরিয়েবলের সাথে বাঁধতে পারেন।
জটিলতায় এর ব্যয় রয়েছে কিনা তা সম্পূর্ণ অস্পষ্ট। একটি জিনিসের জন্য, আপনি জটিলতার বিষয়ে আবশ্যকীয় দৃষ্টান্তগুলি উল্লেখ করেছেন। এটি কার্যকরী প্রোগ্রামিংয়ের জন্য সংজ্ঞায়িত নয়, যদি না আপনি আপনার কার্যকরী প্রোগ্রামকে অপরিহার্য হিসাবে পড়তে চান, যা ডিজাইনারের উদ্দেশ্য নয়। প্রকৃত ক্রিয়াকলাপের দৃষ্টিভঙ্গি আপনাকে এই জাতীয় সমস্যা সম্পর্কে উদ্বিগ্ন না হওয়ার এবং কী গণনা করা হচ্ছে তাতে মনোনিবেশ করার উদ্দেশ্যে is এটি কিছুটা স্পেসিফিকেশন বনাম বাস্তবায়নের মতো।
সংকলকটি বাস্তবায়নের যত্ন নিতে হবে, এবং হার্ডওয়্যার যা করতে হবে তার সাথে যা করা হবে তা সর্বোত্তমভাবে খাপ খাইয়ে নিতে যথেষ্ট স্মার্ট হতে হবে।
আমি বলছি না যে প্রোগ্রামাররা কখনই এটি নিয়ে চিন্তা করে না। আমি এটাও বলছি না যে প্রোগ্রামিং ভাষা এবং সংকলক প্রযুক্তিটি যতটা পরিপক্ক আমরা তাদের মতো হতে চাই।
প্রশ্নের উত্তর
আপনি বিদ্যমান মানটি (এলিয়েন ধারণা) সংশোধন করবেন না, তবে নতুন মানগুলি পছন্দ করুন যেখানে পৃথক করা সম্ভব গণনা করুন, সম্ভবত এটির জন্য একটি অতিরিক্ত উপাদান থাকার পরে এটি একটি তালিকা।
প্রোগ্রামটি নতুন ডেটা পেতে পারে। পুরো বিষয়টি হ'ল আপনি কীভাবে ভাষায় তা প্রকাশ করেন। আপনি উদাহরণস্বরূপ বিবেচনা করতে পারেন যে প্রোগ্রামটি একটি নির্দিষ্ট মান নিয়ে কাজ করে, সম্ভবত আকারে সীমাহীন, যা ইনপুট প্রবাহ বলে। এটি এমন একটি মান যা সেখানে বসে থাকার কথা বলে মনে করা হচ্ছে (এটি ইতিমধ্যে সম্পূর্ণরূপে পরিচিত কিনা বা আপনার সমস্যা নয়)। তারপরে আপনার একটি ফাংশন রয়েছে যা প্রবাহের প্রথম উপাদান এবং বাকী স্ট্রিমের সমন্বয়ে গঠিত একটি জুটি দেয় returns
আপনি একে সম্পূর্ণ প্রয়োগমূলক উপায়ে যোগাযোগ করার উপাদানগুলির নেটওয়ার্ক তৈরি করতে এটি ব্যবহার করতে পারেন (কর্টাইন)
মেশিন লার্নিং হ'ল আর একটি সমস্যা যখন আপনাকে ডেটা ক্রেটিট করতে হয় এবং মানগুলি সংশোধন করতে হয়। ক্রিয়ামূলক প্রোগ্রামিংয়ে আপনি এটি করবেন না: আপনি কেবলমাত্র নতুন মানগুলি প্রশিক্ষণ করুন যা প্রশিক্ষণের ডেটা অনুসারে উপযুক্ত। ফলস্বরূপ মেশিনটি পাশাপাশি কাজ করবে। আপনি যে বিষয়টি নিয়ে চিন্তিত তা হ'ল সময় এবং স্থান দক্ষতা গণনা। তবে, আবারও এটি একটি আলাদা সমস্যা, এটি আদর্শভাবে কম্পাইলার দ্বারা আচরণ করা উচিত।
চূড়ান্ত মন্তব্য
মন্তব্য বা অন্যান্য উত্তরগুলি থেকে এটি পুরোপুরি স্পষ্ট যে ব্যবহারিক কার্যনির্বাহী প্রোগ্রামিং ভাষা সম্পূর্ণরূপে কার্যকরী নয়। এটি আমাদের প্রযুক্তি এখনও উন্নত করা উচিত যে প্রতিফলন, বিশেষত যেখানে সংকলন উদ্বিগ্ন।
খাঁটি প্রয়োগমূলক স্টাইলে কি লেখা সম্ভব? উত্তর প্রায় 40 বছর ধরে জানা ছিল এবং এটি "হ্যাঁ"। ১৯ 1970০ এর দশকে ডেনোটেশনাল শব্দার্থক শব্দগুলির উদ্ভবের উদ্দেশ্য হ'ল গাণিতিকভাবে আরও ভাল বোঝা এবং এইভাবে প্রোগ্রামগুলির শব্দার্থক সংজ্ঞা সংজ্ঞায়িত করার জন্য একটি আরও ভাল তহবিল হিসাবে বিবেচনা করা, খাঁটি কার্যকরী শৈলীতে অনুবাদ (সংকলন) করা ছিল to
মজার দিকটি হ'ল এটি যে ভেরিয়েবল সহ অপরিহার্য প্রোগ্রামিং কাঠামোটি কোনও ডাটা স্টোরের মতো মানগুলির উপযুক্ত ডোমেনগুলি প্রবর্তন করে একটি কার্যকরী শৈলীতে অনুবাদ করা যায়। এবং কার্যকরী শৈলী সত্ত্বেও, এটি অবাক করা শৈলীতে লিখিত প্রকৃত সংকলকগুলির কোডের সাথে আশ্চর্যজনকরূপে মিল রয়েছে।