হাস্কেলের মানচিত্রের বিন্দুটি কী, যখন এফএমএপ থাকে?


99

আমি যেখানেই চেষ্টা করার চেষ্টা করেছি map, fmapপাশাপাশি কাজ করেছে। কেন হাস্কেলের নির্মাতারা কোনও mapফাংশনের প্রয়োজনীয়তা অনুভব করেছিলেন ? বর্তমানে ভাষা হিসাবে এটি কী হিসাবে পরিচিত fmapএবং fmapকেবল তা সরানো যায়?


13
আমি মনে করি আপনি জিজ্ঞাসা করছেন 'হাস্কেল এফএমএপ এর বিন্দু কি?'
zw324

12
আমি জানি যে বিষয়টি fmapকী। এটি কোনও ফান্টেক্টরের উদাহরণে কোনও ফাংশন মানচিত্র করা। আমি বিশেষায়নের উদ্দেশ্যটি অবাক করে দিচ্ছি map
ক্লার্ক গাবেল

উত্তর:


95

আমি অগাস্টসের মন্তব্যের প্রতি দৃষ্টি আকর্ষণ করার জন্য একটি উত্তর দিতে চাই :

আসলে এটি হয় না। যা ঘটেছিল তা হ্যাসেল ১.৩ এ ফান্টেক্টরটি coverাকতে মানচিত্রের ধরণটিকে সাধারণকরণ করা হয়েছিল। অর্থাত, হাস্কেলের ১.৩ এফএম্যাপকে মানচিত্র বলা হয়েছিল। এরপরে এই পরিবর্তনটি হ্যাস্কেল ১.৪ এ ফিরিয়ে দেওয়া হয়েছিল এবং এফএমএপি চালু হয়েছিল। এই পরিবর্তনের কারণ ছিল শিক্ষামূলক; যখন হাস্কেলকে শিখিয়েছিলেন খুব সাধারণ ধরণের মানচিত্র ত্রুটি বার্তাগুলি বুঝতে আরও অসুবিধা হয়। আমার মতে এটি সমস্যা সমাধানের সঠিক উপায় ছিল না।

হাস্কেল 98 কে কিছু হাস্কেলারের (আমাকে সহ) পূর্ববর্তী সংস্করণগুলি আরও বিমূর্ত এবং ধারাবাহিক লাইব্রেরি সংজ্ঞায়িত করার এক ধাপ হিসাবে দেখেছে। আচ্ছা ভালো.


16
এই পশ্চাৎ পদক্ষেপগুলি কি কোথাও সংগ্রহ এবং নথিভুক্ত করা হয়েছে? আর কী কী পিছনের পদক্ষেপ হিসাবে বিবেচিত হয়েছিল এবং যদি তাদের আরও ভাল সমাধান পাওয়া যায় তবে তা আকর্ষণীয় হবে।
দাভোরাক

4
map and fmapএকটি দীর্ঘ সময়ের জন্য হয়েছে প্রায় - এটা আগস্ট 2006 সালে Haskell, প্রধানমন্ত্রী মেইলিং তালিকা reheated ছিল - haskell.org/pipermail/haskell-prime/2006-August/thread.html । কাউন্টারপয়েন্ট হিসাবে আমি স্থিতাবস্থা পছন্দ করি। আমার কাছে এটি মূল্যবান বলে মনে হচ্ছে যে হাস্কেলের একটি উপসেট রয়েছে যা প্রায় মিরান্ডার সাথে মিলে যায়। যুক্তরাজ্যে, মিরান্ডা কেবল কম্পিউটার বিজ্ঞানের ছাত্র নয়, গণিতের শিক্ষার্থীদের জন্য একটি শিক্ষাদানের ভাষা হিসাবে ব্যবহৃত হয়েছিল। যদি সেই কুলুঙ্গিটি ইতিমধ্যে কোনও অ-কার্যকরী ভাষাতে হারিয়ে না যায় (যেমন ম্যাথামেটিকা) আমি হাস্কেলকে একীভূতভাবে mapপূরণ করে দেখছি না।
স্টিফেন টেটলি

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

4
হাস্কেল উইকিতে এখন নিতপিক্স পৃষ্ঠা রয়েছে যেখানে এই সমস্যাটির উল্লেখ রয়েছে।
আলেক্সি

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

28

Https://wiki.haskell.org/Typeclassopedia#FunctorFunctor এ ডকুমেন্টেশন থেকে উদ্ধৃতি

আপনি আমাদের জিজ্ঞাসা করতে পারেন কেন আমাদের পৃথক mapফাংশন প্রয়োজন । কেন কেবলমাত্র কেবলমাত্র বর্তমান তালিকার mapকার্যকারিতাটি বাদ দিয়ে পরিবর্তে নামকরণ fmapকরবেন map? ঠিক আছে, এটি একটি ভাল প্রশ্ন। সাধারণ যুক্তিটি হ'ল যে কেউ হাসকলকে শিখছে, যখন mapভুলভাবে ব্যবহার করা হচ্ছে তখন তার চেয়ে প্রায় তালিকাগুলি সম্পর্কে একটি ত্রুটি দেখতে পাবে Functor


4
এটি আমার কাছে অনেক কিছু বোঝায়।
hbobenicio

25

অ্যাপ্লিকেশন সাইটে এগুলি দেখতে একই রকম তবে অবশ্যই তারা আলাদা। আপনি যখন এই দুটি ফাংশনগুলির মধ্যে দুটি প্রয়োগ করেন, mapবা fmap, মানগুলির তালিকায় তারা একই ফলাফল তৈরি করে তবে এর অর্থ এই নয় যে তারা একই উদ্দেশ্যে তৈরি meant

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

মানচিত্র

সম্পর্কিত তথ্যের জন্য জিএইচসিআই জিজ্ঞাসা করুন map

Prelude> :info map
map :: (a -> b) -> [a] -> [b]   -- Defined in ‘GHC.Base’

এবং আপনি এটি একটি উচ্চ-অর্ডার ফাংশন কোন প্রকার মান একটি তালিকা প্রযোজ্য হিসাবে সংজ্ঞায়িত দেখতে পাবেন aকোন প্রকার মান একটি তালিকা ফলনশীল b। যদিও বহুরুপী ( aএবং bকোনো ধরনের জন্য উপরের সংজ্ঞা স্ট্যান্ড মধ্যে) mapফাংশন একটি প্রয়োগ করা দেয়ার উদ্দেশ্যে করা হচ্ছে মূল্যবোধের তালিকা যা Haskell, অনেক অন্যদের মধ্যে মাত্র এক সম্ভাব্য ডাটা টাইপ হয়। mapফাংশন কিছু যা মূল্যবোধের তালিকা নয় প্রয়োগ করা যেতে পারে।

আপনি যেমনটি জিএইচসি.বেস সোর্স কোড থেকে পড়তে পারেন , mapফাংশনটি নিম্নলিখিতভাবে প্রয়োগ করা হয়েছে

map _ []     = []
map f (x:xs) = f x : map f xs

যা xতালিকার পুচ্ছ (দ) থেকে মাথা (the ) টানতে প্যাটার্ন ম্যাচিংয়ের ব্যবহার xsকরে, তারপরে :(কনস) মান নির্মাতা ব্যবহার করে একটি নতুন তালিকা তৈরি করে যাতে এটি পুনরায় সংশোধন করতে পারে f x(এটিকে "x এফ প্রয়োগ করা হবে " হিসাবে পড়ুন ) mapতালিকাটি খালি না হওয়া পর্যন্ত পুচ্ছকে পুনরাবৃত্তি করতে হবে । এটি লক্ষণীয় যে mapফাংশনটির বাস্তবায়ন অন্য কোনও ফাংশনের উপর নির্ভর করে না কেবল নিজের উপর।

fmap

এখন সম্পর্কে তথ্যের জন্য জিজ্ঞাসা করার চেষ্টা করুন fmapএবং আপনি কিছু আলাদা দেখতে পাবেন।

Prelude> :info fmap
class Functor (f :: * -> *) where
  fmap :: (a -> b) -> f a -> f b
  ...
  -- Defined in ‘GHC.Base’

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

আপনি যেমনটি জিএইচসি.বেস সোর্স কোড থেকে পড়তে পারেন, ফাংশনটির একটি সম্ভাব্য বাস্তবায়ন fmapহ'ল Maybeডেটা টাইপ দ্বারা সরবরাহ করা :

instance  Functor Maybe  where
  fmap _ Nothing       = Nothing
  fmap f (Just a)      = Just (f a)

এবং অন্য সম্ভাব্য বাস্তবায়ন হ'ল 2-টিউপল ডেটা ধরণের দ্বারা সরবরাহ করা

instance Functor ((,) a) where
  fmap f (x,y) = (x, f y)

এবং আরেকটি সম্ভাব্য বাস্তবায়ন হ'ল তালিকার ডেটা ধরণের (অবশ্যই!) সরবরাহ করা:

instance  Functor []  where
  fmap f xs = map f xs

যা mapফাংশন উপর নির্ভর করে ।

উপসংহার

mapফাংশন মূল্যবোধের তালিকা (যেখানে মান যেকোনো ধরনের হয়) ছাড়া আর কিছুই প্রয়োগ করা যেতে পারে যেহেতু fmapফাংশন আরো অনেক কিছু ধরনের তথ্য প্রয়োগ করা যেতে পারে: যেমন maybes, tuples, তালিকা, ইত্যাদি ঐ (যা functor বর্গ জন্যে সব )। যেহেতু "মানগুলির তালিকা" ডাটা টাইপটিও একটি ফান্টেক্টর (কারণ এটি এটির জন্য একটি বাস্তবায়ন সরবরাহ করে) তারপরে fmapপ্রয়োগ করা যেতে পারে পাশাপাশি একই ফলাফল তৈরি করে map

map  (+3) [1..5]
fmap (+3) (Just 15)
fmap (+3) (5, 7)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.