Monads কোন প্রোগ্রামিং সমস্যাগুলি সমাধান করে? [বন্ধ]


14

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

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

কেন?

কেন মনাদসের ব্যাপার? এগুলি এত গুরুত্বপূর্ণ কেন? তারা সমস্যাগুলি কী সমাধান করছে? এই সমস্যাগুলি কি কেবল সোমাদের সাহায্যে সমাধান করা যায় বা অন্য কোনও উপায় রয়েছে?


3
প্রোগ্রামগুলি বড় এবং জটিল। সেগুলি গঠনের জন্য আমাদের প্রয়োজন উপায়। অনেক উপায় আছে। মনড এক। তীরগুলি এক। ফ্যাক্টর এক। অবজেক্টস, ক্লাসেস, ফাংশনস, মেথডস, মডিউলস, বৈশিষ্ট্য, মিক্সিনস, প্যাকেজস, এবং অন্য কিছু, আপনার নির্দিষ্ট প্রশ্নটি কী তা সত্যই তা পরিষ্কার নয়। আপনি কি আমাদের জিজ্ঞাসা করছেন যে আমাদের কেন প্রোগ্রাম গঠনের দরকার?
Jörg ডব্লু মিটাগ

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



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

উত্তর:


10

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

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

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


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

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

1
@ জুলস: বা হাস্কেলের ইতিহাস দেখুন। মোনাডের আগে, হাস্কেল ডিজাইনাররা অলস স্ট্রিম এবং ধারাবাহিকতাগুলি I / O এর ভিত্তি হিসাবে পরীক্ষা করেছিলেন এবং উভয়ই ব্যবহার করা শক্ত।
Jörg ডব্লু মিটাগ

5

আপনি যদি নির্দিষ্ট মনদেসে তাকান এবং তারা কোন সমস্যাগুলি সমাধান করে তা দেখতে সহজ হয় তা বোঝা সহজ। উদাহরণস্বরূপ, হাসকেলে:

  • আইও: টাইপ সিস্টেমে আইওকে প্রতিনিধিত্ব করার অনুমতি দেয়, তাই আপনি আইও সম্পাদনকারী ফাংশনগুলি থেকে পৃথক বিশুদ্ধ ফাংশনগুলি পরিষ্কার করতে পারেন।

  • তালিকা: তালিকা বোধগম্য এবং নোডেস্ট্রিনিস্টিক গণনা করার অনুমতি দেয়।

  • হতে পারে: নালগুলির জন্য আরও ভাল বিকল্প এবং সি # এর নাল-কোলেসিং অপারেটরের সাথে তুলনীয় কিছুকে সমর্থন করা।

  • পার্সেক: পার্সার লেখার জন্য একটি সুবিধাজনক ডিএসএল।

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

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


2

একটা জিনিষ এটি বিভ্রান্তিকর তোলে মত "জনপ্রিয়" ফাংশন হয় bindএবং <*>অনুশীলনের ওরিয়েন্টেড করছে। তবে ধারণাগুলি বোঝার জন্য প্রথমে অন্যান্য ফাংশনগুলি তাকাতে আরও সহজ। এগুলিও লক্ষণীয় যে মনডগুলি আলাদা হয়ে দাঁড়িয়েছে কারণ তারা অন্যান্য সংযুক্ত ধারণাগুলির তুলনায় কিছুটা ওভারহাইপযুক্ত। সুতরাং আমি পরিবর্তে ফান্টেক্টর দিয়ে শুরু করব।

ফ্যাক্টররা একটি ফাংশন সরবরাহ করে (হাস্কেল নোটেশনে) fmap :: (Functor f) => (a -> b) -> f a -> f b। অন্য কথায় আপনার কাছে এমন একটি প্রসঙ্গ রয়েছে fযা আপনি কোনও ফাংশনটি এতে তুলতে পারেন। আপনি প্রায় কল্পনা করতে পারেন যে কোনও ফান্টেক্টর। তালিকাগুলি, হতে পারে, হয়, ফাংশন, I / O, টিপলস, পার্সার্স ... প্রত্যেকটি একটি প্রসঙ্গ প্রতিনিধিত্ব করে যেখানে কোনও মান উপস্থিত হতে পারে। সুতরাং আপনি চূড়ান্ত বহুমুখী ফাংশন লিখতে পারেন যা ব্যবহার করে fmapবা এর ইনলাইন রূপটি প্রায় কোনও প্রসঙ্গে কাজ করে <$>

প্রসঙ্গের সাথে আপনি কি অন্যান্য জিনিসগুলি করতে চান? আপনি দুটি বিষয়গুলি একত্রিত করতে চাইতে পারেন। আপনার একটি সাধারণীকরণ পেতে চাইতে পারেন তাই zip :: [a] -> [b] -> [(a,b)]এই রকম উদাহরণস্বরূপ: pair :: (Monoidal f) => f a -> f b -> f (a,b)

কিন্তু এটা আরও বেশি দরকারী বাস্তবে কারণ, Haskell, পরিবর্তে অফার পাঠাগাি Applicative, যার মধ্যে সংমিশ্রণ Functorএবং Monoidal, এবং এছাড়াও এর Unitযা শুধু বলেছেন যে আপনি আসলে লাগাতে পারেন মান "ভিতরে" সঙ্গে আপনার কনটেক্সট, unit

আপনি যে প্রসঙ্গে কাজ করছেন সে সম্পর্কে এই তিনটি বিষয় উল্লেখ করে আপনি অত্যন্ত জেনেরিক ফাংশন লিখতে পারেন।

Monadআপনি যে শীর্ষে বলতে পারেন তা ঠিক অন্য একটি বিষয়। আমি এর আগে যা উল্লেখ করি নি তা হ'ল আপনার কাছে ইতিমধ্যে দুটি প্রসঙ্গকে একত্রিত করার দুটি উপায় রয়েছে: আপনি কেবল সেগুলিই পারবেন না pairতবে আপনি সেগুলিও সজ্জিত করতে পারেন, উদাহরণস্বরূপ আপনার তালিকাগুলির একটি তালিকা থাকতে পারে। I / O প্রসঙ্গে, একটি উদাহরণ হ'ল I / O ক্রিয়া যা কোনও ফাইল থেকে অন্যান্য I / O ক্রিয়াকলাপ পড়তে পারে, যাতে আপনার টাইপ থাকে FilePath -> IO (IO a)। এক্সিকিউটেবল ফাংশন পেতে আমরা কীভাবে সেই স্ট্যাকিং থেকে মুক্তি পেতে পারি IO a? যে যেখানে আছে Monadগুলি joinআসে এটা আমাদের একই ধরনের দুটি স্তুপীকৃত প্রেক্ষিতে একত্রিত করতে দেয়। একই জিনিসটি পার্সার, সম্ভবত ইত্যাদি ক্ষেত্রেও ব্যবহৃত হয় এবং bindএটি ব্যবহারের আরও একটি ব্যবহারিক উপায়join

সুতরাং কোনও একজাতীয় প্রসঙ্গে কেবল চারটি জিনিস সরবরাহ করতে হয় এবং এটি I / O, পার্সার্স, ব্যর্থতা ইত্যাদির জন্য তৈরি করা প্রায় সমস্ত যন্ত্রপাতি দিয়ে ব্যবহার করা যেতে পারে it


1

মনাদস আপনাকে সরলকরণের পাশাপাশি বিভিন্ন অ-খাঁটি গণনা প্রকাশ করতে দেয়

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

এবং, গুরুত্বপূর্ণ বিষয় হল খাঁটি ভাষা নির্মানের সাথে কোনও আপস না করে এবং এ থেকে পরিষ্কার ভাষাটি না পেয়ে


2
সত্য - তবে এটি মোনাডগুলির জন্য ব্যবহৃত হয় কেবল তারই একটি অংশ। তালিকা উপলব্ধি বা Maybeবাহ্যিক কোনও কিছুর সাথে সম্পর্কিত নয়।
জ্যাকবিবি

ডাউনভোটাররা যদি তারা কেন এমনটি করে থাকে তা ব্যাখ্যা করা যদি সহায়ক হয়। আমি এই উত্তর দিয়ে কোন ভুল দেখছি না।
জুলাই

@ জ্যাকসবি বি তারা যদিও রাষ্ট্রীয়।
জুলাই

1
যদিও বিশ্বের ধরণ, স্বতন্ত্রতা প্রকার, লিনিয়ার প্রকারগুলি আপনাকে এটি করতে দেয়।
Jörg ডব্লু মিটাগ

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