সুতরাং, বলুন, ডেটাবেজ বা রাইটিং ফাইল অনুসন্ধান করা সংজ্ঞা অনুসারে খাঁটি কার্যকরী শৈলীতে করা যায়নি। এটি উদাহরণস্বরূপ, আমাদের স্নাদের প্রয়োজনের একটি কারণ।
কারও "monad" প্রয়োজন নেই, এটি জিনিস বর্ণনা করার একমাত্র উপায়। আসলে, এটি সম্ভবত সর্বোত্তম উপায়ও নয়। কিছু প্রকারের প্রভাব টাইপিং , স্বতন্ত্রতা প্রকারের , বা সম্পূর্ণ লিনিয়ার যুক্তি ভিত্তিক একটি সিস্টেম তত্ত্বের ক্ষেত্রে আরও দৃ pers়প্রবণ বলে মনে হয় তবে সুপরিচিত টাইপ সিস্টেমগুলি থেকে আরও সমস্ত র্যাডিকাল প্রস্থান এবং প্রকাশ করা আরও জটিল। হাস্কেল-তে পাওয়া মোনাডিক আইও হ'ল ব্যবহারযোগ্যতা এবং সরলতার মধ্যে একটি সমঝোতা, যেহেতু এটি মূলত সম্পূর্ণরূপে আবশ্যক প্রোগ্রামিংয়ের মডেলগুলি এমনভাবে উপস্থাপন করে যা ভাষাতে ইতিমধ্যে ব্যবহৃত এমএল-স্টাইল টাইপের সিস্টেমের সাথে সহজেই একত্রে উপস্থিত হয়।
প্রশ্নটি হল - কেন আমরা STDOUT আউটপুটটিকে অপরিষ্কার কিছু হিসাবে বিবেচনা করি? হ্যাঁ, যে কোনও ফাইল হ্যান্ডলার ঝুঁকিপূর্ণ - আমরা কখনই নিশ্চিত হতে পারি না যে ডেটা সর্বদা লেখা থাকবে। কিন্তু STDOUT সম্পর্কে কি? কেন আমরা এটিকে অবিশ্বাস্য কিছু মনে করি? এটি মূল্যায়ন নিজেই কি আরও বিশ্বাসযোগ্য নয়? আমি বলতে চাইছি, আমরা সবসময় ট্রিগারটি টানতে পারি এবং এইভাবে গণনা বাধায়।
এটি না, এবং আমরাও করি না। ইনপুট ইন এবং আউটপুট থেকে, পুরো প্রোগ্রামটিকে সহজভাবে পুরো প্রোগ্রামটিকে একটি বৃহত বিশুদ্ধ ফাংশন হিসাবে বিবেচনা করার ফলে আর্গুমেন্ট এবং ফলাফল হিসাবে বিবেচনা করা যেতে পারে। যতক্ষণ না এটি স্ট্যান্ডআউটকে একই জিনিস প্রিন্ট করে আপনি যদি স্টিডিন থেকে একই জিনিস খাওয়ান তবে এটি এখনও একটি খাঁটি ফাংশন। প্রকৃতপক্ষে, মোনাডিক আইও প্রবর্তনের আগে, হাস্কেল একটি স্ট্রিম-ভিত্তিক আই / ও সিস্টেম ব্যবহার করেছিল যা ইনপুট এবং আউটপুটের জন্য খাঁটি আলস্য প্রবাহ ব্যবহার করে। এটি এটিকে ফেলে দিয়েছে কারণ এটি সম্ভবত ব্যবহারের জন্য ব্যথা ছিল যা আপনাকে কেন এমন কিছু শোনেনি সে সম্পর্কে কিছুটা ধারণা দিতে পারে। :]
একটি দুরত্বপূর্ণ উপায়ে পয়েন্টটি তৈরি করতে, স্বল্পপরিচয়তা বিশিষ্ট ভাষা বিবেচনা করুন, অলস কে :
অলস কে একটি আবর্জনা-সংগৃহীত, সাধারণ প্রবাহ ভিত্তিক আই / ও সিস্টেম সহ স্বচ্ছ ফাংশনাল প্রোগ্রামিং ভাষা।
অলস কে কে এই জাতীয় অন্যান্য ভাষার চেয়ে আলাদা করে তোলে এটি অন্যান্য বৈশিষ্ট্যগুলির প্রায় সম্পূর্ণ অভাব। এটি উদাহরণস্বরূপ, একটি সমন্বিত হিন্ডি-মিলনার পলিমারফিক টাইপ সিস্টেম সরবরাহ করে না। প্ল্যাটফর্ম-স্বতন্ত্র জিইউআই প্রোগ্রামিং এবং অন্যান্য ভাষায় বাইন্ডিংয়ের সমর্থন সহ এটি একটি বিস্তৃত স্ট্যান্ডার্ড লাইব্রেরি সহ পাঠানো হয় না। বা অন্যান্য বিষয়গুলির মধ্যে থেকে, যেমন কোনও লাইব্রেরি লেখা যায় না, অলস কে বিল্ট-ইনগুলি ব্যতীত অন্য কোনও কার্যকারিতা সংজ্ঞায়িত বা রেফারেন্স দেওয়ার কোনও উপায় সরবরাহ করে না। এই অক্ষমতাটি সংখ্যা, স্ট্রিং বা অন্য কোনও ডেটা টাইপের জন্য সমর্থন মিলার অভাব দ্বারা পরিপূরক। তবুও, অলস কে টুরিং-সম্পূর্ণ।
(...)
অলস কে প্রোগ্রামগুলি গাণিতিক ক্রিয়াকলাপগুলির মতো একই নিরবধি প্লাটোনিক রাজ্যে বাস করে, যা আনলম্বদা পৃষ্ঠাটি "খাঁটি অবিরত ল্যাম্বডা ক্যালকুলাসের আশীর্বাদ অঞ্চল" বলে calls আবর্জনা সংগ্রহ যেমন প্রোগ্রামার থেকে মেমরি পরিচালনার প্রক্রিয়াটিকে গোপন করে, তেমনি রেফারেন্সিয়াল স্বচ্ছতা মূল্যায়নের প্রক্রিয়াটিকে আড়াল করে। ম্যান্ডেলব্রোট সেটের কোনও ছবি দেখার জন্য বা একটি অলস কে প্রোগ্রাম "চালানোর" জন্য কিছু গণনা প্রয়োজন তা বাস্তবায়নের বিশদ। এটি ফাংশনাল প্রোগ্রামিংয়ের সারমর্ম।
(...)
পার্শ্ব প্রতিক্রিয়া ছাড়াই কোনও ভাষায় ইনপুট এবং আউটপুট কীভাবে পরিচালনা করবেন? একটি নির্দিষ্ট অর্থে, ইনপুট এবং আউটপুট কোনও পার্শ্ব প্রতিক্রিয়া নয়; তারা, তাই কথা বলতে, সম্মুখ- এবং ব্যাক-ইফেক্ট। সুতরাং এটি অলস কে, যেখানে কোনও প্রোগ্রামকে কেবল সম্ভাব্য ইনপুটগুলির স্থান থেকে সম্ভাব্য আউটপুটগুলির স্থান পর্যন্ত একটি কার্য হিসাবে বিবেচনা করা হয়।
আমি সন্দেহ করি যে এর চেয়ে আরও বিশুদ্ধভাবে কার্যকরী ভাষা আপনি খুঁজে পাবেন!
তবে মনে রাখবেন যে উপরোক্তগুলি কেবল একটি খাঁটি ফাংশনের ইনপুট এবং আউটপুট গ্রহণ এবং স্ট্যান্ডিন / স্টাডাউটের সাথে "বাহ্যিকভাবে" কোনওভাবে সংযুক্ত করার জন্য প্রযোজ্য। এর মধ্যে এবং বাস্তব সিস্টেম-স্তরের আই / ও আদিমগণের অ্যাক্সেসের মধ্যে একটি বড় পার্থক্য রয়েছে। স্ট্রিমগুলিতে পড়া এবং লেখার প্রয়োগের বিশদটি সাবধানতার সাথে আবদ্ধ না হলে অপরিষ্কার ফাঁস হতে পারে।
আমি আশা করি এটি হ্যাসকেলে সরাসরি না করতে পারার মূল কারণ - বুদ্ধিমান ব্যবহারের ঘটনাগুলি মনাদিক আইও ব্যবহারের তুলনায় স্লিম এবং পরবর্তীকালের জন্য আসল জিনিসটিতে অ্যাক্সেস পাওয়ার অনেক সুবিধা রয়েছে। আমি বিশ্বাস করি যে, উদাহরণস্বরূপ, প্রোগ্রামটিতে কমান্ড-লাইন আর্গুমেন্টগুলি কেবলমাত্র যুক্তি হিসাবে আর্গুমেন্ট হিসাবে পাস করা হয় না main
, যদিও এটি স্বজ্ঞাতভাবে মনে হয় যে তাদের হওয়া উচিত।
আপনি একটি নির্দিষ্ট প্রোগ্রাম ভালো কিছু একটি সংক্ষিপ্ত সংস্করণ পুনরুদ্ধার করতে পারেন যদিও - শুধু বিশুদ্ধ মান হিসাবে আর্গুমেন্ট ক্যাপচার এবং তারপর ব্যবহার ফাংশন আপনার প্রোগ্রাম বাকি জন্য।interact