রেফারেন্সিয়াল স্বচ্ছতা কী?


285

রেফারেন্সিয়াল স্বচ্ছতা শব্দটির অর্থ কী? আমি এটিকে "এর অর্থ আপনি সমান সমান প্রতিস্থাপন করতে পারবেন" হিসাবে বর্ণিত শুনেছি তবে এটি একটি অপর্যাপ্ত ব্যাখ্যার মতো বলে মনে হচ্ছে।


1
বাহ আমি ভাবছি কেন এই প্রশ্নের জনপ্রিয়তায় হঠাৎ উত্থান ...
ক্লোদিয়

1
@ ক্লাউডিয়া: আমি নিশ্চিতভাবে বলতে পারি না, তবে আর / হ্যাশেল বাতাস পেয়েছে এবং অনেকে অনুভব করেছিলেন উদয় বেশ নিখুঁত হলেও সম্প্রদায়ের দিকে কিছুটা রসিকতা নিয়েছিলেন।
এফ্রে

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

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

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

উত্তর:


362

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

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

বাক্যটির একটি প্রসঙ্গ "প্রাসঙ্গিকভাবে স্বচ্ছ" হয় যদি সেই প্রসঙ্গে একটি পদকে অন্য পদ দ্বারা প্রতিস্থাপন করা হয় যা একই সত্তাকে বোঝায় তবে তার অর্থ পরিবর্তন হয় না। উদাহরণ স্বরূপ

স্কটল্যান্ডের রাজধানী স্কটল্যান্ডের পার্লামেন্টে সভা হয়েছে।

মানে একই

স্কটিশ পার্লামেন্টের সভা এডিনবার্গে।

সুতরাং "স্কটিশ পার্লামেন্টের বৈঠকে ..." প্রসঙ্গটি একটি স্বতঃস্ফূর্ত স্বচ্ছ প্রসঙ্গ। অর্থ পরিবর্তন না করে আমরা "স্কটল্যান্ডের রাজধানী" "এডিনবার্গ" দিয়ে প্রতিস্থাপন করতে পারি। অন্য কোনও উপায়ে বলতে গেলে, প্রসঙ্গটি কেবল শব্দটি কী বোঝায় সে সম্পর্কে যত্নশীল এবং অন্য কিছুই নয়। এটি সেই অনুভূতিতে যে প্রসঙ্গটি "রেফারেন্টালি স্বচ্ছ"।

অন্যদিকে, বাক্যে,

এডিনবার্গ ১৯৯৯ সাল থেকে স্কটল্যান্ডের রাজধানী।

আমরা এই ধরনের প্রতিস্থাপন করতে পারি না। আমরা যদি তা করি তবে আমরা পেয়ে যাব "১৯৯৯ সাল থেকে এডিনবার হ'ল এডিনবার্গ", যা বলা বাহুল্য বিষয় এবং মূল বাক্যটির মতো একই অর্থ প্রকাশ করে না। সুতরাং, মনে হবে প্রসঙ্গটি "এডিনবার্গ ১৯৯৯ সাল থেকে ..." রেফারেন্টালি অস্বচ্ছ (রেফারেন্টালি স্বচ্ছের বিপরীত) is এটি স্পষ্টতই শব্দটি বোঝায় তার চেয়েও বেশি কিছু সম্পর্কে চিন্তা করে। এটা কি?

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

স্কটল্যান্ডের রাজধানী ছিল ১৯৯৯ সাল থেকে এবং সেই রাজধানীটি এডিনবার্গ।

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

এই সমস্ত কি প্রোগ্রামিং সঙ্গে কি আছে? আসলে খুব বেশি নয়। যেমনটি আমরা বলেছি, রেফারেনশিয়াল স্বচ্ছতা ভাষা বোঝার ক্ষেত্রে অর্থ বোঝাতে ব্যবহার করার একটি সরঞ্জাম । ক্রিস্টোফার স্ট্রেচি , যিনি প্রোগ্রামিং ভাষার শব্দার্থবিদ্যার ক্ষেত্র প্রতিষ্ঠা করেছিলেন, তিনি তার অর্থ গবেষণায় এটি ব্যবহার করেছিলেন। তাঁর ফাউন্ডেশনাল পেপার " প্রোগ্রামিং ভাষায় মৌলিক ধারণা " ওয়েবে উপলব্ধ is এটি একটি সুন্দর কাগজ এবং প্রত্যেকে এটি পড়তে এবং বুঝতে পারে। সুতরাং, দয়া করে এটি করুন। আপনি অনেক আলোকিত হবে। তিনি এই অনুচ্ছেদে "রেফারেনশিয়াল স্বচ্ছতা" শব্দটি চালু করেছেন:

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

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

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

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

[অতিরিক্ত দ্রষ্টব্য: উপরের উদাহরণগুলি উদাহরণস্বরূপ বোঝায় যে "স্কটল্যান্ডের মূলধন" এর মতো একটি সহজ বাক্যাংশটির একাধিক অর্থ রয়েছে। এক পর্যায়ে, আমরা বর্তমান সময়ে রাজধানী সম্পর্কে কথা বলছি। অন্য স্তরে, আমরা সম্ভবত স্কটল্যান্ডের সেই সমস্ত সম্ভাব্য রাজধানীগুলি নিয়ে কথা বলব। আমরা সাধারণ অনুশীলনে খুব সহজেই সমস্ত প্রসঙ্গটি ছড়িয়ে দিতে একটি নির্দিষ্ট প্রসঙ্গে "জুম" করতে এবং "জুম আউট" করতে পারি। প্রাকৃতিক ভাষার দক্ষতা তা করার আমাদের দক্ষতার ব্যবহার করে। অত্যাবশ্যক প্রোগ্রামিং ভাষা খুব একইভাবে দক্ষ। নির্দিষ্ট অবস্থাতে এর মান সম্পর্কে আলাপ করার জন্য আমরা একটি অ্যাসাইনমেন্টের ( r-value ) ডানদিকে একটি ভেরিয়েবল এক্স ব্যবহার করতে পারি । অথবা, আমরা এর এল-মান সম্পর্কে কথা বলতে পারিযা সমস্ত রাজ্যে বিস্তৃত। মানুষ এই জাতীয় জিনিসগুলি দ্বারা খুব কমই বিভ্রান্ত হয়। তবে, তারা ভাষা নির্মানের অন্তর্নিহিত অর্থের সমস্ত স্তরগুলি সঠিকভাবে ব্যাখ্যা করতে সক্ষম হতে পারে বা নাও করতে পারে। এ জাতীয় অর্থের সমস্ত স্তর অগত্যা 'সুস্পষ্ট' নয় এবং সেগুলি সঠিকভাবে অধ্যয়ন করা বিজ্ঞানের বিষয়। যাইহোক, এই জাতীয় স্তরযুক্ত অর্থগুলি ব্যাখ্যা করার জন্য সাধারণ মানুষের অযৌক্তিকতা বোঝায় না যে তারা তাদের সম্পর্কে বিভ্রান্ত are

নীচে একটি পৃথক "পোস্টস্ক্রিপ্ট" কার্যনির্বাহী এবং অপরিহার্য প্রোগ্রামিংয়ের উদ্বেগগুলির সাথে এই আলোচনাটির সাথে সম্পর্কিত


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

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

13
@sclv কম্পিউটার বিজ্ঞানের উপর বিশ্লেষণাত্মক দর্শনের বিস্তৃত প্রভাব সম্পর্কে, আমার বলা উচিত যে কম্পিউটার বিজ্ঞান, যা আমরা এটি জানি, গডেল, চার্চ, ক্লিন এবং টুরিং দ্বারা প্রতিষ্ঠিত হয়েছিল। এই ব্যক্তিরা লজিস্টিয়ান ছিলেন এবং তারা যুক্তির গাণিতিক এবং দার্শনিক দিক উভয়ই বিশেষত পেরোন, ফ্রেইজ, রাসেল, হোয়াইটহেড, কার্নাপ এবং কুইনের traditionsতিহ্যগুলিতে দক্ষ ছিলেন। আধুনিক কম্পিউটার বিজ্ঞানের প্রারম্ভিক নেতারা সংযোগগুলি জানতেন। কিন্তু কম্পিউটার বিজ্ঞানের দ্রুত বিকাশ তাদের বিচ্ছিন্ন করেছে। আমাদের তাদের কাছে ফিরে যেতে হবে।
উদয় রেড্ডি

5
@sclv লজিক traditionতিহ্যগতভাবে পরিণতির বিজ্ঞান হিসাবে গণ্য করা হয় । তবে আমি মনে করি এটি একটি বিস্তৃত। এটি তথ্য বিজ্ঞান । কুইন, আমি প্রথমটি হিসাবে দেখি যে কে আরও বিস্তৃত দৃষ্টিভঙ্গি এনেছে। "শব্দ এবং অবজেক্ট" প্রাকৃতিক ভাষার বিবৃতিগুলির তথ্যের সামগ্রীর বিশ্লেষণ। তবে, দার্শনিক বা গণিতবিদ কেউই গণনার ক্ষেত্রে সক্রিয় আগ্রহ গ্রহণ করেন নি , যা বেশিরভাগ সময় থেকেই সভ্যতা ও বিজ্ঞানের জন্য কেন্দ্রীয় গণনা চলে আসছে তা বিবেচনা করে তা বেশ বিভ্রান্তিকর। তাদের আগ্রহী করার জন্য আমাদের উপায় খুঁজতে হবে।
উদয় রেড্ডি

3
@ কনোনাল: আমি একটি নতুন উত্তর যুক্ত করেছি যা আপনার বক্তব্যকে প্রশস্ত করে। এটি সম্ভবত পৃষ্ঠার নীচে থাকবে।
উদয় রেড্ডি

134

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

এখানে একটি রেফারেন্সিয়াল স্বচ্ছ ফাংশনের উদাহরণ রয়েছে:

int plusOne(int x)
{
  return x+1;
}

একটি ইনফুট এবং একটি ফাংশন প্রদত্ত একটি রেফারেন্সিয়াল স্বচ্ছ ফাংশন সহ, আপনি এটিকে ফাংশনটি কল করার পরিবর্তে একটি মান দিয়ে প্রতিস্থাপন করতে পারেন। সুতরাং 5 এর পরামিতি দিয়ে প্লাসওন কল করার পরিবর্তে, আমরা কেবল এটি 6 এর সাথে প্রতিস্থাপন করতে পারি।

আর একটি ভাল উদাহরণ হ'ল সাধারণভাবে গণিত। গণিতে কোনও ফাংশন এবং একটি ইনপুট মান দেওয়া হয়, এটি সর্বদা একই আউটপুট মানকে ম্যাপ করে। f (x) = x + 1. অতএব গণিতে ক্রিয়াকলাপগুলি স্বচ্ছ হয়।

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

রেফারেন্সিয়াল স্বচ্ছতা হাস্কেলের মতো ক্রিয়ামূলক ভাষায় সর্বদা ব্যবহৃত হয়।

-

এর বিপরীতে রেফারেনশিয়াল অস্বচ্ছতার ধারণা রয়েছে। এর অর্থ বিপরীত। ফাংশনটিতে কল করা সর্বদা একই আউটপুট তৈরি করে না।

//global G
int G = 10;

int plusG(int x)
{//G can be modified externally returning different values.
  return x + G;
}

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

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


1
কেবল একটি মাথা উঁচু করে, রেফারেন্টালি স্বচ্ছ সদস্য ফাংশন সহ একটি সম্পূর্ণ রেফারেন্সিয়ালি স্বচ্ছ বস্তু রাখা সম্ভব। Okmij.org/ftp/Scheme/oop-in-fp.txt
জোনাথন

1
এবং এই নিবন্ধটিতে যে কোডটি
জোনাথন

সম্পূর্ণরূপে স্বচ্ছ শ্রেণীর ক্ষেত্রে আপনার সম্ভবত সমস্ত সদস্যের কাজ স্থির থাকে।
ব্রায়ান আর বন্ডি

13
আপনি এখানে যে বিষয়ে কথা বলছেন তা উল্লেখযোগ্য স্বচ্ছতা নয়, যদিও এটি সাধারণত হিসাবে উল্লেখ করা হয় referred উদয়ের দুটি উত্তর এবং তাদের সম্পর্কে মন্তব্যগুলি দেখুন। বিশেষত, আপনি যাকে "আউটপুট" বলছেন তা বোঝা যাচ্ছে না। যদি আপনি "প্লাসজি 3" প্রতিস্থাপন করে অন্য কোনও মত প্রকাশের সাথে একই মান / বর্ণটি ব্যবহার করেন, আপনি অবশ্যই একই অর্থ সহ একটি প্রোগ্রাম পাবেন, সুতরাং আরটি অনিবার্য ভাষায় ধারণ করে। অভিব্যক্তি "3 + + 10" বা "13" না কারণ অনুজ্ঞাসূচক ভাষায় যার অর্থ "দোকান" (অঙ্গরাজ্য) একটি ফাংশন, হিসাবে "plusG 3" একই অর্থ আছে।
কনল

1
আমি কেবলমাত্র পার্শ্ব প্রতিক্রিয়া এবং রাষ্ট্রের পরিবর্তন সম্পর্কিত একটি নিবন্ধ পড়েছি এবং একটি অন্তর্দৃষ্টি পেয়েছি এটির আরটিটির সাথে কিছু করার আছে। আপনি দয়া করে এটিতে একটি নোট যোগ করতে পারেন?
গৌরব

91

একটি উল্লেখযোগ্যভাবে স্বচ্ছ ফাংশন হ'ল এটি কেবল তার ইনপুটের উপর নির্ভর করে।


4
এই কারণেই ওও প্রোগ্রামিংয়ে এটি শক্ত কারণ কারণ বস্তুর স্থিতি রয়েছে।
ক্রিস

5
সুতরাং ফাংশন বর্ণনা করার সময় "ডিফারেন্টালিস্টিক" স্বতন্ত্র "বলতে কি" রেফারেন্টালি ট্রান্সফারিক "বলা কি সঠিক? যদি তা না হয় তবে দুটি পদাবলীর মধ্যে পার্থক্য কী?
mwolfe02

1
এটি "খাঁটি" ফাংশনের সংজ্ঞা বলে মনে হয়।
ইভজেনি এ।

75

[আলোচনাকে কার্যকরী / অত্যাবশ্যক প্রোগ্রামিংয়ের উদ্বেগের আরও কাছে আনার প্রয়াত ২৫ শে মার্চ থেকে আমার এই উত্তরটির পোস্টস্ক্রিপ্ট cript

রেফারেন্সিয়াল স্বচ্ছতার কার্যকরী প্রোগ্রামারদের ধারণাটি তিনটি উপায়ে স্ট্যান্ডার্ড ধারণা থেকে পৃথক বলে মনে হচ্ছে:

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

  • কার্যকরী প্রোগ্রামাররা বিশ্বাস করে যে এই "মানগুলি" প্রোগ্রামিং ভাষার ভিতরেই রয়েছে, বাইরে নয়। এটি করার ক্ষেত্রে, তারা দার্শনিক এবং প্রোগ্রামিং ভাষার শব্দার্থবিদ উভয়ের থেকে পৃথক।

  • তারা বিশ্বাস করে বলে মনে হয় যে এই "মানগুলি" মূল্যায়নের মাধ্যমে প্রাপ্ত হওয়ার কথা।

উদাহরণস্বরূপ, রেফারেন্সিয়াল স্বচ্ছতার বিষয়ে উইকিপিডিয়া নিবন্ধটি বলেছেন, আজ সকালে:

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

দার্শনিক / লজিস্টিয়ানরা যা বলেন তার সাথে এটি সম্পূর্ণ ভিন্ন। তারা বলে যে একটি প্রসঙ্গটি রেফারেনশিয়াল বা রেফারেন্সিয়ালি স্বচ্ছ হয় যদি সেই প্রসঙ্গে কোনও অভিব্যক্তিটি একই জিনিসকে বোঝায় এমন একটি অন্য অভিব্যক্তি দ্বারা প্রতিস্থাপন করা যেতে পারে (একটি কোরফেরেনশিয়াল এক্সপ্রেশন)। এই দার্শনিক / যুক্তিবিদ কারা? এগুলির মধ্যে রয়েছে ফ্রিজ , রাসেল , হোয়াইটহেড , কার্নাপ , কুইন , চার্চএবং অগণিত অন্য। তাদের প্রত্যেকটিই এক বিশাল চিত্র। এই লজিস্টিয়ানদের সম্মিলিত বৌদ্ধিক শক্তি হ'ল ন্যূনতমভাবে বলতে গেলে পৃথিবী-চূর্ণকারী। এঁরা সকলেই সেই অবস্থানের বিষয়ে imক্যবদ্ধ যে প্রথাগত ভাষার বাইরে রেফারেন্ট / বর্ণচিহ্ন বিদ্যমান এবং ভাষার ভিতরে প্রকাশ কেবল তাদের সম্পর্কেই কথা বলতে পারে। সুতরাং, ভাষার মধ্যে যা কিছু করতে পারে তা হ'ল এক এক্সপ্রেশনটিকে অন্য এক্সপ্রেশন দ্বারা প্রতিস্থাপন করা যা একই সত্তাকে বোঝায়। Referents / denotations নিজেদের না ভাষা মধ্যে বিদ্যমান। কার্যকরী প্রোগ্রামাররা কেন এই সুপ্রতিষ্ঠিত traditionতিহ্য থেকে বিচ্যুত হয়?

কেউ ধারণা করতে পারেন যে প্রোগ্রামিং ল্যাঙ্গুয়েজ শব্দার্থবিদরা তাদের বিভ্রান্ত করেছে। কিন্তু, তারা তা করেনি।

ল্যান্ডিন :

(ক) প্রতিটি এক্সপ্রেশন একটি নেস্টিং subexpression কাঠামো আছে, (খ) প্রতিটি subexpression কিছু বোঝায় (সাধারণত একটি সংখ্যা, সত্য মান বা সংখ্যাসূচক ফাংশন) , (গ) একটি অভিব্যক্তি যে জিনিসটি বোঝায়, তার "মান" কেবল তার উপর নির্ভর করে এর উপ-এক্সপ্রেশনগুলির মানগুলি, অন্য কোনও বৈশিষ্ট্যে নয়। [যুক্ত জোড়]

স্টয় :

একটি অভিব্যক্তি সম্পর্কে একমাত্র বিষয়টির মূল্য হ'ল তার মান এবং যে কোনও স্যুপ এক্সপ্রেসনকে অন্য কোনও সমান মান দ্বারা যুক্ত করা যেতে পারে [যুক্ত জোর]] তদুপরি, একটি অভিব্যক্তির মান নির্দিষ্ট সীমার মধ্যে যখনই ঘটে তখন একই "।

পাখি এবং Wadler :

একটি অভিব্যক্তিটির মানটি কেবলমাত্র তার উপাদানযুক্ত ভাবের মানগুলির উপর নির্ভর করে (যদি থাকে) এবং এই subexpress একই মান [যুক্ত জোড়] থাকা অন্যরা অবাধে প্রতিস্থাপন করতে পারে ।

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

একবার আমরা একটি জটিল গাণিতিক / ধারণাগত অবজেক্ট হিসাবে অভিব্যক্তির তথাকথিত "মান" (শাস্ত্রীয় দার্শনিকদের বক্তৃতায় "রেফারেন্স" বা "ডোনোটেশন") বুঝতে পারলে সমস্ত ধরণের সম্ভাবনা খোলে।

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

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

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

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

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

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

  • ৩.২ বিভাগে তিনি "এক্সপ্রেশন" নিয়ে আলোচনা করেছেন যেখানে তিনি "আর-মূল্য রেফারেন্সিয়াল স্বচ্ছতা" সম্পর্কে কথা বলেছেন।
  • তার ৩.৩ ধারাটি "কমান্ডগুলি" নিয়ে কাজ করে যেখানে তিনি "এল-মূল্য রেফারেন্সিয়াল স্বচ্ছতা" সম্পর্কে কথা বলেন।
  • ৩.৪.৫ বিভাগে তিনি "ফাংশন এবং রুটিন" সম্পর্কে কথা বলেছেন এবং ঘোষণা করেন যে "আর-মান প্রসঙ্গে রেফারেন্সিয়াল স্বচ্ছতার যে কোনও প্রস্থানের বহিঃপ্রকাশটি হয় বেশ কয়েকটি কমান্ড এবং সরল অভিব্যক্তিগুলিতে বিভ্রান্ত করে, বা যদি এটি কঠিন হয়ে উঠেছে, একটি মন্তব্যের বিষয় ""

এল-ভ্যালু, আর-ভ্যালু এবং অন্যান্য জটিল বস্তুগুলির মধ্যে পার্থক্য বুঝতে না পেরে "রেফারেনশিয়াল স্বচ্ছতার" যে কোনও আলোচনা অগত্যা প্রোগ্রামারের ধারণাগত মহাবিশ্বকে জনপ্রিয় করে তোলে এটি মূলত ভুল is


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

8
অর্থাত, মূল্যায়ন ধারণাটি এই সিদ্ধান্তে পৌঁছায় যে অপরিহার্য ভাষাগুলি আরটি নয়, যখন ডেনোটেশন ধারণাটি হয় না।
কনল

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

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

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

23

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


18

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


10

একটি সংক্ষিপ্ত ব্যাখ্যা প্রয়োজন তাদের জন্য আমি একটি বিপত্তি করব (তবে নীচে প্রকাশটি পড়ুন)।

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

fx = x + x,

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

উদাহরণস্বরূপ, foo সি প্রোগ্রামিং অর্থে যদি x ++ থাকে তবে আপনি এই হ্রাসটি নিরাপদে করতে পারতেন না (যার অর্থ, যদি আপনি এই হ্রাসটি চালাচ্ছিলেন তবে আপনি যে প্রোগ্রামটি শুরু করেছিলেন তা শেষ না করে)।

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

(সম্পূর্ণ প্রকাশ: আমি একজন কার্যনির্বাহী প্রোগ্রামার তাই শীর্ষ জবাব দিয়ে আপনার এই ব্যাখ্যাটি নুনের দানা দিয়ে নেওয়া উচিত))


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

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

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

2
@ ক্রিসডর্নান: আমার প্রথম মন্তব্যের জন্য দুঃখিত। প্রথম দুটি বাক্যে আমি যা বলতে চাইছিলাম তা তৈরি করতে আমার নিজেই অসুবিধা হয়েছিল :-( তবে, এখানে একটি ব্যাখ্যা two দুটি স্তরের বা বহু-স্তরের মঞ্চের ক্যালকুলাস বিবেচনা করুন Each প্রতিটি স্টেজিং অপারেটর রেফারেন্সালি অস্বচ্ছ। এটি বাস্তবে সত্য is কোটেশন অপারেটর।তবে আপনি প্রতিটি পর্যায়ে ইক্যুয়েশনাল রিজনিং পুরোপুরি ঠিকঠাক করতে পারেন। সুতরাং, প্রতিটি রেফারেন্সালি স্পষ্টতই অপারেটর সমীকরণের যুক্তির জন্য সীমানা স্থাপন করে।কিন্তু আপনার এখনও সেই সীমানার মধ্যে সমীকরণীয় যুক্তি রয়েছে।
উদয় রেড্ডি

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

8

আপনি যদি ব্যুৎপত্তি বিষয়ে আগ্রহী হন (অর্থাত্ এই ধারণাটির এই বিশেষ নামটি কেন আছে), বিষয়টিতে আমার ব্লগ পোস্টটি দেখুন । পরিভাষাটি দার্শনিক / যুক্তিবিদ কুইনের কাছ থেকে আসে।


4
  1. ডোনোটেশনাল-শব্দার্থবিজ্ঞান ডেনোটেবল মানগুলি তৈরি করে এমন ডোমেনগুলি তৈরি করে মডেলিং ভাষার উপর ভিত্তি করে ।
  2. প্রায়োগিক প্রোগ্রামাররা শব্দটি ব্যবহার মান একটি গুনতি ভাষা অর্থাত্ লেখা নিয়ম উপর ভিত্তি করে অভিসৃতি বর্ণনা করতে। এর অপারেশনাল শব্দার্থক।

1-এ প্রশ্নে দুটি ভাষার স্পষ্টতা রয়েছে:

  • এক মডেলিং করা হচ্ছে, বস্তু ভাষা
  • মডেলিংয়ের ভাষা, মেটা ভাষা

2-এ, বস্তুর ঘনিষ্ঠতা এবং ধাতব ভাষাগুলির জন্য ধন্যবাদ, তারা বিভ্রান্ত হতে পারে।

ভাষা প্রয়োগকারী হিসাবে, আমি দেখতে পাই যে এই পার্থক্যটি আমার ক্রমাগত মনে রাখা দরকার।

প্রফেসর রেড্ডি আমি আপনাকে এইভাবে প্যারাফ্রেস করতে পারি :-)

ক্রিয়ামূলক প্রোগ্রামিং এবং শব্দার্থবিজ্ঞানের প্রসঙ্গে, রেফারেনশিয়াল ট্রান্সপারেন্সি শব্দটি উল্লেখযোগ্যভাবে স্বচ্ছ নয়।


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

4

নিম্নলিখিত উত্তরটি আমি আশা করি বিতর্কিত প্রথম এবং তৃতীয় উত্তর যুক্ত করে এবং যোগ্যতা অর্জন করে।

আসুন আমরা মঞ্জুর করি যে একটি অভিব্যক্তি কিছু রেফারেন্টকে বোঝায় বা বোঝায়। যাইহোক, একটি প্রশ্ন হ'ল এই রেফারেন্টগুলি এই জাতীয় অভিব্যক্তিগুলিকে 'মান' বলে অভিহিত করে নিজেরাই প্রকাশের অংশ হিসাবে আলাদাভাবে এনকোড করা যায়। উদাহরণস্বরূপ, আক্ষরিক সংখ্যার মানগুলি পাটিগণিতের এক্সপ্রেশনগুলির সেটের একটি উপসেট, সত্য মানগুলি বুলিয়ান এক্সপ্রেশনগুলির সেটের একটি উপসেট ইত্যাদি etc. ধারণাটি হ'ল তার মানটির সাথে কোনও অভিব্যক্তি মূল্যায়ন করা (যদি এটি থাকে)। সুতরাং 'মান' শব্দের অর্থ একটি বর্ণ বা অভিব্যক্তির সেটের একটি পৃথক উপাদানকে বোঝায়। তবে যদি রেফারেন্ট এবং মানের মধ্যে আইসোমরফিজম (একটি বাইজেকশন) থাকে তবে আমরা বলতে পারি যে তারা একই জিনিস। (এটি বলেছে, একটিকে অবশ্যই রেফারেন্টস এবং আইসোমর্ফিজমকে সংজ্ঞায়িত করার জন্য সতর্কতা অবলম্বন করতে হবে, যেমন ডেনোটেশনাল শব্দার্থবিদ্যার ক্ষেত্র দ্বারা প্রমাণিত। তৃতীয় উত্তরের উত্তরে উল্লিখিত একটি উদাহরণ দেওয়ার জন্য,data Nat = Zero | Suc Nat প্রাকৃতিক সংখ্যার সেটের সাথে প্রত্যাশার সাথে মিল নেই))

আসুন E[·]একটি গর্ত সহ একটি প্রকাশের জন্য লিখি , এটি কিছু প্রান্তে 'প্রসঙ্গ' হিসাবেও পরিচিত। সি-মত প্রকাশের জন্য দুটি প্রসঙ্গ উদাহরণ [·]+1এবং [·]++

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

আসুন আমরা কুইনের সংজ্ঞাটি কিছুটা আনুষ্ঠানিকভাবে নিম্নরূপে মানিয়ে নিই: একটি প্রসঙ্গ E[·] উল্লেখযোগ্যভাবে স্বচ্ছ হয় যদি কোনও দুটি অভিব্যক্তি দেওয়া হয় E1এবং E2(কোনও গর্ত নেই) যেমন [[E1]] = [[E2]](অর্থাত্ প্রকাশগুলি একই রেফারেন্টকে বোঝায় / রেফার করে) তবে তার ক্ষেত্রে এটি ঘটে [[E[E1]]] = [[E[E2]]](অর্থাত্ ভরাট - হয়রানীর সাথে গর্তে E1বা E2এক্সপ্রেশনগুলিতে ফলাফল যা একই একইটিকে বোঝায়।

সমান হিসাবে সমান প্রতিস্থাপনের লাইবনিজের নিয়মটি সাধারণত 'যদি E1 = E2তবে E[E1] = E[E2]' হিসাবে প্রকাশিত হয় , যা বলে যে E[·]এটি একটি ফাংশন। একটি ফাংশন (বা সেটির জন্য ফাংশনটি গণনা করার জন্য প্রোগ্রামটি) একটি উত্স থেকে একটি লক্ষ্যে একটি ম্যাপিং হয় যাতে প্রতিটি উত্স উপাদানের জন্য সর্বাধিক একটি লক্ষ্য উপাদান থাকে। অ-নিরঙ্কুশক ক্রিয়াকলাপগুলি =হ'ল ভুল ব্যবহারকারী, সেগুলি হয় সম্পর্ক, ফাংশন সেট সরবরাহ ইত্যাদি Le সুতরাং একটি উল্লেখযোগ্য স্বচ্ছ প্রসঙ্গ একটি ফাংশন। এবং লাইবনিজের নিয়ম সমীকরণীয় যুক্তির মূল উপাদান, সুতরাং সমীকরণের যুক্তি অবশ্যই স্পষ্টভাবে স্বচ্ছতার সাথে সম্পর্কিত।

যদিও [[·]]অভিব্যক্তি থেকে ডেনোটেশনের ক্ষেত্রে এটি একটি ফাংশন, এটি এক্সপ্রেশন থেকে 'মানগুলিতে' প্রকাশের একটি সীমাবদ্ধ উপসেট হিসাবে বোঝা একটি ফাংশন হতে পারে এবং [[·]]এটি মূল্যায়ন হিসাবে বোঝা যায়।

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

মত প্রসঙ্গে যেমন সমস্যাটি [·]++পার্শ্ব প্রতিক্রিয়া নয়, তবে এটির মানটি সি এরোসম্পর্কিতভাবে সংজ্ঞায়িত হয়নি। ক্রিয়াকলাপগুলি মান হয় না (ভাল, ফাংশনগুলির দিকে নির্দেশক হয়) তবে কার্যকরী প্রোগ্রামিং ভাষাগুলিতে তারা হয়। ল্যান্ডিন, স্ট্রেচি এবং ডায়নোটেশনাল শব্দার্থবিদ্যার পথিকৃৎরা অর্থ প্রদানের জন্য কার্যকরী জগত ব্যবহারে যথেষ্ট চালাক ছিলেন।

অপরিহার্য সি-এর মতো ভাষার জন্য আমরা (মোটামুটিভাবে) ফাংশনটি ব্যবহার করে এক্সপ্রেশনগুলিকে শব্দার্থ সরবরাহ করতে পারি [[·]] : Expression -> (State -> State x Value)

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

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


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

2

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

একটি সম্পর্কিত সমস্যা যা প্রোগ্রামিংয়ের প্রসঙ্গে প্রদর্শিত হতে পারে তা বহুবচন হতে পারে।

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


0

আমি " কম্পিউটার প্রোগ্রামার স্ট্রাকচার অ্যান্ড ইম্পিমেন্টেশন " (উইজার্ড বুক) বইটিতে রেফারেন্সিয়াল স্বচ্ছতার সংজ্ঞাটি দরকারী বলে খুঁজে পেয়েছি কারণ এটি অ্যাসাইনমেন্ট অপারেশন প্রবর্তন করে রেফারেন্সিয়াল স্বচ্ছতা কীভাবে লঙ্ঘিত হয়েছে তার একটি ব্যাখ্যা দ্বারা পরিপূরক । এই বিষয়টি সম্পর্কে আমি নিম্নলিখিত স্লাইড ডেকটি দেখেছি: https://www.slideshare.net/pjschwarz/introducing-assignment-inomotates-the-substedia-model-of-evaluation-and-violates-referencesnac- transferences-as- ব্যাখ্যা-ইন-sicp-জাদুকর-বুক


0

রেফারেন্সিয়াল স্বচ্ছতা হিসাবে সহজভাবে বলা যেতে পারে:

  • একটি অভিব্যক্তি সর্বদা কোনও প্রসঙ্গে একই ফলাফলের মূল্যায়ন করে [1] ,
  • একটি ফাংশন, যদি একই পরামিতিগুলিকে দু'বার দেওয়া হয় তবে অবশ্যই একই ফলাফলটি দু'বার তৈরি করতে হবে [2]

উদাহরণস্বরূপ, প্রোগ্রামিং ভাষা হাস্কেল একটি খাঁটি কার্যকরী ভাষা; মানে এটি স্বচ্ছভাবে স্বচ্ছ।

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