ক্রিয়ামূলক প্রোগ্রামিংয়ে অপরিবর্তনীয়তা কি আসলেই বিদ্যমান?


9

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

অপরিবর্তনীয়তা সম্পর্কে আমার বোঝা:

  • যখন কোনও প্রোগ্রাম শুরু হয় তখন এতে স্থির ডেটা সহ স্থির ডাটা স্ট্রাকচার থাকে
  • এই স্ট্রাকচারগুলিতে কেউ নতুন ডেটা যুক্ত করতে পারে না
  • কোডটিতে কোনও ভেরিয়েবল নেই
  • আপনি ইতিমধ্যে ডেটা বা বর্তমানে গণনা করা ডেটা থেকে কেবল "অনুলিপি" করতে পারেন
  • সর্বোপরি, অপরিবর্তনীয়তা একটি প্রোগ্রামে বিশাল স্থান জটিলতা যুক্ত করে

আমার প্রশ্নগুলো:

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

2
আপনি যখন বলছেন ফাংশনাল কোডে কোনও ভেরিয়েবল নেই তখন আমি আপনার সাথে একমত নই। গাণিতিক অর্থে ভেরিয়েবল রয়েছে "" এমন একটি পরিমাণ যা মানগুলির কোনও সেটকে ধরে নিতে পারে "। এগুলি পরিবর্তনীয় , নিশ্চিত নয়, তবে তারা গণিতেও নেই।
Edouard

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

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

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

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

উত্তর:


10

যখন কোনও প্রোগ্রাম শুরু হয় তখন এতে স্থির ডেটা সহ স্থির ডাটা স্ট্রাকচার থাকে

এটি কিছুটা ভুল ধারণা। এটির একটি নির্দিষ্ট ফর্ম এবং পুনর্লিখনের নিয়মের একটি নির্দিষ্ট সেট রয়েছে তবে এই পুনর্লিখনের নিয়মগুলি আরও বড় কিছুতে বিস্ফোরিত হতে পারে। উদাহরণস্বরূপ, হাস্কেল-তে অভিব্যক্তি [1..100000000] খুব সামান্য পরিমাণের কোড দ্বারা উপস্থাপিত হয় তবে এর স্বাভাবিক রূপটি বিশাল।

এই স্ট্রাকচারগুলিতে কেউ নতুন ডেটা যুক্ত করতে পারে না

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

কোডটিতে কোনও ভেরিয়েবল নেই

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

আপনি ইতিমধ্যে ডেটা বা বর্তমানে গণনা করা ডেটা থেকে কেবল "অনুলিপি" করতে পারেন

আপনি সাধারণ ফর্ম হ্রাস দ্বারা গণনা সম্পাদন করতে পারেন। করণীয় হ'ল সর্বোত্তম কাজটি সম্ভবত কার্যকরী ভাষায় প্রোগ্রামগুলি লিখতে যায় তা দেখার জন্য তারা আসলে কীভাবে গণনা সম্পাদন করে।

উদাহরণস্বরূপ "যোগফল [1..1000]" আমি সম্পাদন করতে চাইছি এমন গণনা নয় তবে এটি বেশ সহজেই হাস্কেলের দ্বারা সম্পন্ন হয়েছে। আমরা এটিকে একটি ছোট্ট এক্সপ্রেশন দিয়েছিলাম যা আমাদের কাছে অর্থপূর্ণ ছিল এবং হাস্কেল আমাদের সাথে সম্পর্কিত নম্বরটি দিয়েছিলেন। সুতরাং এটি অবশ্যই গণনা সম্পাদন করে।

যদি ডেটা স্ট্রাকচারগুলি সেগুলি (অপরিবর্তনীয়) হিসাবে থাকার কথা মনে হয়, তবে কীভাবে কেউ তালিকায় কোনও নতুন আইটেম যুক্ত করবেন?

আপনি তালিকায় কোনও নতুন আইটেম যুক্ত করবেন না, আপনি পুরানোটির বাইরে একটি নতুন তালিকা তৈরি করবেন। যেহেতু পুরানোটিকে রূপান্তরিত করা যায় না এটি নতুন তালিকায় এটি ব্যবহার করা পুরোপুরি নিরাপদ, বা অন্য যে কোনও জায়গায় আপনি চান। এই স্কিমাতে আরও অনেক তথ্য নিরাপদে ভাগ করা যায়।

এমন একটি প্রোগ্রাম থাকার কী লাভ যেটি নতুন ডেটা পেতে পারে না? বলুন আপনার কম্পিউটারে সংযুক্ত একটি সেন্সর রয়েছে যা প্রোগ্রামে ডেটা ফিড করতে চায়। তার মানে কি আমরা যে কোথাও ইনকামিং ডেটা সঞ্চয় করতে পারি না?

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

সেক্ষেত্রে মেশিন লার্নিংয়ের জন্য ফাংশনাল প্রোগ্রামিং কীভাবে ভাল? যেহেতু মেশিন লার্নিং প্রোগ্রামগুলির "ধারণার" বিষয়গুলিকে আপডেট করার অনুমান থেকে তৈরি করে - এইভাবে নতুন ডেটা সঞ্চয় করে।

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


আমার মনে হচ্ছে আপনি @ পিথিকোসের পোস্টের সবচেয়ে গুরুত্বপূর্ণ বিষয় হতে পারে যা সুবিধামত উপেক্ষা করেছেন, যা স্থানের সমস্যা - কার্যকরী প্রোগ্রামগুলি অপরিহার্য ব্যক্তির চেয়ে বেশি স্থান ব্যবহার করে (আপনি
জায়গাগুলির

2
এটি কেবল সত্য নয়। মিউটেশনটির অভাব ভাগ করে নেওয়ার মাধ্যমে তৈরি করা হয় এবং সর্বোপরি আপনি যে আকারের পার্থক্যটি উল্লেখ করেন তা আধুনিক সংকলকগুলির সাথে খুব কম। হ্যাসেলের তালিকাগুলির বেশিরভাগ কোড কার্যকরীভাবে হয় বা কোনও স্মৃতি ব্যবহার করে না।
জেক

1
আমি মনে করি আপনি এমএল কিছুটা ভুল উপস্থাপন করেছেন। হ্যাঁ, আই / ও যে কোনও জায়গায় ঘটতে পারে তবে বিদ্যমান কাঠামোর মধ্যে নতুন তথ্য যেভাবে প্রবর্তন করা হয়েছে তা দৃ tight়ভাবে নিয়ন্ত্রণ করা হয়েছে।
dfeuer

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

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

4

অপরিচ্ছন্নতা বা পরিবর্তন হ'ল এমন ধারণা নয় যা কার্যকরী প্রোগ্রামিংয়ে বোঝায়।

গণনা প্রসঙ্গে

এটি একটি খুব ভাল প্রশ্ন যা অন্য একটি সাম্প্রতিক প্রশ্নের আকর্ষণীয় ফলোআপ (ডুপ্লিকেট নয়): অ্যাসাইনমেন্ট, মূল্যায়ন এবং নামকরণের মধ্যে পার্থক্য কী?

বরং একের পর এক আপনার জবাবের জবাব দেওয়ার জন্য, আমি এখানে কী চেষ্টা করছি তার একটি কাঠামোগত ওভারভিউ দেওয়ার চেষ্টা করছি।

আপনাকে উত্তর দেওয়ার জন্য কয়েকটি বিষয় বিবেচনা করতে হবে, যার মধ্যে রয়েছে:

  • গণনার একটি মডেল কী এবং কোন ধারণাগুলি কোনও প্রদত্ত মডেলের জন্য অর্থবোধ করে

  • আপনি যে শব্দগুলি ব্যবহার করছেন তার অর্থ কী এবং এটি কীভাবে প্রসঙ্গে নির্ভর করবে

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

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

আশা করি এই উত্তরটির দৈর্ঘ্য সত্ত্বেও কয়েকজন আগ্রহী হবেন।

গণনার দৃষ্টান্ত

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

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

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

তবে, এর অর্থ এই নয় যে দুটি মডেল একই জিনিসগুলি করে বা একের জন্য অর্থপূর্ণ ধারণাটি অন্যটিতে স্থানান্তরিত হতে পারে। সাধারণত, একটি টিএম এর একটি গণনা পদক্ষেপের সাথে একটি (β-) ল্যাম্বদা ক্যালকুলাসে হ্রাস পদক্ষেপ, যদিও তারা আন্তঃ অনুবাদযোগ্য। ল্যাম্বডা এক্সপ্রেশনটির সর্বোত্তম মূল্যায়নের ধারণা টিএম মডেলের জটিলতার সমস্যা থেকে বেশ দূরে।

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

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

সাধারণত, হাস্কেল এবং এমএল বা সিএএমএল এর মতো ভাষাগুলিকে কার্যকরী হিসাবে বিবেচনা করা হয়, তবে তারা অত্যাবশ্যক আচরণের অনুমতি দিতে পারে ... অন্যথায় কেন " বিশুদ্ধভাবে কার্যকরী উপসেট " সম্পর্কে কথা বলা হবে ?

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

উত্তরগুলি অতিরিক্ত ছাড়াই একটি নির্দিষ্ট দৃষ্টান্তের সাথে আরও স্পষ্টভাবে সম্পর্কিত হওয়া উচিত।

একটি পরিবর্তনশীল কি?

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

Traditionalতিহ্যগত অপরিহার্য প্রোগ্রামিংয়ে, একটি পরিবর্তনশীল কোনও ধরণের ধারক (বা মেমরি অবস্থান) হিসাবে বোঝা যায় যা কোনও মানের উপস্থাপনা মুখস্ত করতে পারে এবং সম্ভবত এর বর্তমান মানটি অন্য একটি দ্বারা প্রতিস্থাপন করতে পারে)।

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

ধ্রুবক হিসাবে যে কোনও প্রকারের ভেরিয়েবলগুলি সনাক্তকারীদের দ্বারা উপস্থাপিত হতে পারে।

অপরিহার্য পরিবর্তনশীল এর মান পরিবর্তন করতে পারে এবং এটি হ'ল পরিবর্তনের ভিত্তি। ক্রিয়ামূলক পরিবর্তনশীল পারে না cannot

প্রোগ্রামিং ভাষাগুলি সাধারণত বৃহত্তর সত্তাগুলি ভাষার ছোট থেকে তৈরি করতে দেয়।

অপরিহার্য ভাষাগুলি এ জাতীয় নির্মাণগুলিকে ভেরিয়েবলগুলি অন্তর্ভুক্ত করার অনুমতি দেয় এবং এটিই আপনাকে পরিবর্তনীয় ডেটা দেয়।

কিভাবে একটি প্রোগ্রাম পড়তে হয়

একটি প্রোগ্রামটি মৌলিকভাবে আপনার অ্যালগরিদমের বিমূর্ত বর্ণনামূলক কিছু ভাষা হয়, বাস্তববাদী নকশাকেন্দ্রিক বা উপমা হিসাবে বিশুদ্ধ ভাষা whether

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

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

কার্যকরী প্রোগ্রামিং এবং পরিবর্তন

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

কল্পিত প্রোগ্রামিং মানগুলির সাথে একচেটিয়াভাবে আচরণ করে।

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

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

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

কোনও অপরিহার্য ভেরিয়েবল নেই। কোনও অ্যাসাইনমেন্ট সম্ভব নয়। আপনি নামগুলি কেবলমাত্র মানগুলিতে আবদ্ধ করতে পারেন (ধ্রুবক গঠনের জন্য), অপরিহার্য ভাষাগুলির থেকে ভিন্ন যেখানে আপনি নামগুলি ভেরিয়েবলের সাথে বাঁধতে পারেন।

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

সংকলকটি বাস্তবায়নের যত্ন নিতে হবে, এবং হার্ডওয়্যার যা করতে হবে তার সাথে যা করা হবে তা সর্বোত্তমভাবে খাপ খাইয়ে নিতে যথেষ্ট স্মার্ট হতে হবে।

আমি বলছি না যে প্রোগ্রামাররা কখনই এটি নিয়ে চিন্তা করে না। আমি এটাও বলছি না যে প্রোগ্রামিং ভাষা এবং সংকলক প্রযুক্তিটি যতটা পরিপক্ক আমরা তাদের মতো হতে চাই।

প্রশ্নের উত্তর

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

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

    আপনি একে সম্পূর্ণ প্রয়োগমূলক উপায়ে যোগাযোগ করার উপাদানগুলির নেটওয়ার্ক তৈরি করতে এটি ব্যবহার করতে পারেন (কর্টাইন)

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

চূড়ান্ত মন্তব্য

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

খাঁটি প্রয়োগমূলক স্টাইলে কি লেখা সম্ভব? উত্তর প্রায় 40 বছর ধরে জানা ছিল এবং এটি "হ্যাঁ"। ১৯ 1970০ এর দশকে ডেনোটেশনাল শব্দার্থক শব্দগুলির উদ্ভবের উদ্দেশ্য হ'ল গাণিতিকভাবে আরও ভাল বোঝা এবং এইভাবে প্রোগ্রামগুলির শব্দার্থক সংজ্ঞা সংজ্ঞায়িত করার জন্য একটি আরও ভাল তহবিল হিসাবে বিবেচনা করা, খাঁটি কার্যকরী শৈলীতে অনুবাদ (সংকলন) করা ছিল to

মজার দিকটি হ'ল এটি যে ভেরিয়েবল সহ অপরিহার্য প্রোগ্রামিং কাঠামোটি কোনও ডাটা স্টোরের মতো মানগুলির উপযুক্ত ডোমেনগুলি প্রবর্তন করে একটি কার্যকরী শৈলীতে অনুবাদ করা যায়। এবং কার্যকরী শৈলী সত্ত্বেও, এটি অবাক করা শৈলীতে লিখিত প্রকৃত সংকলকগুলির কোডের সাথে আশ্চর্যজনকরূপে মিল রয়েছে।


0

এটি একটি ভুল ধারণা যে কার্যকরী প্রোগ্রামগুলি ডেটা সঞ্চয় করতে পারে না এবং আমি মনে করি না জ্যাকস উত্তরটি সত্যই এটি খুব ভাল ব্যাখ্যা করেছে।

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

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

আমার নিজের অভিজ্ঞতা থেকে , আমি মনে করি অপরিবর্তনীয় ডেটা স্ট্রাকচারের ধারণাটি প্রচলিত বিকাশকারীদের মনে করতে নেতৃত্ব দিচ্ছে যে এমন কিছু কিছু রয়েছে যা কার্যকরী সেটিংয়ে অযৌক্তিক বা এমনকি অসম্ভব। এই ক্ষেত্রে না হয়.


"কার্যকরী প্রোগ্রামগুলি হ'ল যে কোনও প্রোগ্রামের মতো, সত্যই পূর্ণসংখ্যার সাথে ম্যাপিংয়ের কাজ করে।" মাইনক্রাফ্ট, কীভাবে বলুন, সত্যই একটি ফাংশনটি পূর্ণসংখ্যার সাথে ম্যাপিং করে?
ডেভিড রিচার্বি

সহজে। প্রতিটি বাইটকে বাইনারি পূর্ণসংখ্যা হিসাবে ব্যাখ্যা করা যায়। একটি কম্পিউটারে একটি রাষ্ট্র বাইটের সংগ্রহ of একটি প্রোগ্রাম এমনকি মাইনক্রাফ্ট একটি কম্পিউটারের রাজ্যকে ম্যানিপুলেট করে, একে একে অন্য রাজ্যে ম্যাপ করে।
জেপ্প হার্টমুন্ড

ব্যবহারকারীর ইনপুটটি এই পৃথিবীতে মানানসই বলে মনে হচ্ছে না।
ডেভিড রিচার্বি

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