জিপার কেন কমোনাদ, তা বোঝা যাচ্ছে


112

এটি উত্তরের একটি ফলোআপ আমার আগের প্রশ্নের ।

আমি প্রতিটি আইটেমের ম্যাপ প্রয়োজন ধরুন a:Aএর List[A]থেকে b:Bফাংশন def f(a:A, leftNeighbors:List[A]): Bএবং উৎপন্ন List[B]

স্পষ্টতই আমি কেবল mapতালিকায় কল করতে পারি না তবে আমি তালিকার জিপারটি ব্যবহার করতে পারি । জিপার একটি তালিকার চারদিকে ঘোরাতে কার্সার। এটি বর্তমান উপাদান ( focus) এবং এর প্রতিবেশীদের অ্যাক্সেস সরবরাহ করে ।

এখন আমি আমার প্রতিস্থাপন করতে পারেন fসঙ্গে def f'(z:Zipper[A]):B = f(z.focus, z.left)এবং এই নতুন ফাংশন পাস f'করার cobindপদ্ধতি Zipper[A]

cobindভালো কাজ করে: এটা কল যে f'চেইনটা সঙ্গে, তারপর জিপার চলে আসে, কল f'সঙ্গে নতুন "সরানো" জিপার, আবার ইত্যাদি, এবং তাই জিপার চলে আসে ... যতক্ষণ না জিপার তালিকার শেষে ছুঁয়েছে।

অবশেষে, cobindরিটার্নগুলি টাইপের একটি নতুন জিপার দেয় Zipper[B], যা তালিকায় রূপান্তরিত হতে পারে এবং তাই সমস্যাটি সমাধান হয়ে যায়।

এখন এর মধ্যে প্রতিসাম্যটি নোট করুন cobind[A](f:Zipper[A] => B):Zipper[B]এবং bind[A](f:A => List[B]):List[B]সে কারণেই Listএটি একটি Monadএবং Zipperএকটি Comonad

এটা বোঝা যায় না?


1
আমি বিশেষজ্ঞ নই, তবে এটি আমার কাছে বোধগম্য। আপনার ব্যাখ্যাটি পড়ার সময় আমার কাছে একটি এপিফেনি ছিল। ধন্যবাদ!
আকজয়

7
আপনার প্রশ্নের এসও ফর্ম্যাটে উত্তর দেওয়া খুব কঠিন ... তবে আপনি একেবারে সঠিক। এলিমেন্ট-ফোকাসড জিপার্স সর্বদা কমোনাদ হয়।
জে আব্রাহামসন

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

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

2
আপনি ঠিক বলেছেন আমি একটি উত্তর যুক্ত করব এবং এটি এই উত্তরটি উত্তর না দেওয়া তালিকা থেকে সরিয়ে দেবে, আমি আশা করি
মাইকেল

উত্তর:


1

যেহেতু এই প্রশ্নটি "উত্তরহীন" তালিকার শীর্ষে নিয়মিতভাবে উঠে আসছে, আমাকে কেবল এখানে উত্তর হিসাবে আমার মন্তব্যটি অনুলিপি করুন - একবছর আগে যাইহোক, তেমন যথেষ্ট গঠনমূলক কিছুই হাজির হয়নি।

একটি Listএকটি comonad যেমন যখন একটি, (একাধিক উপায় মধ্যে) ঠিক যেমন ভাল দেখা যাবে Zipperএকটি একসংখ্যা যেমন নিক্ষেপ করা যাবে (এছাড়াও নানাভাবে)। পার্থক্যটি হ'ল আপনি ধারণাগতভাবে কোনও রাষ্ট্রের মেশিনে ( Monad"ইন্টারফেসের বিষয়ে যা") ডেটা গঠনমূলকভাবে "সংযুক্তি" করার উপর দৃষ্টি নিবদ্ধ রেখেছেন , বা এটি থেকে "ডেকনস্ট্রাক্টিভলি" "" এক্সট্র্যাক্ট "করার বিষয়টি (সেটাই হ'ল)Comonad করে)

তবে এই প্রশ্নের উত্তর দেওয়া সহজ নয়, যদিও "এই বোঝাপড়াটি কী বোঝায়" এই হিসাবে বলা হয়েছে। কিছুটা অর্থে এটি করে, অন্যভাবে তা হয় না।

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