অ্যাপ্লিকেশন সাইটে এগুলি দেখতে একই রকম তবে অবশ্যই তারা আলাদা। আপনি যখন এই দুটি ফাংশনগুলির মধ্যে দুটি প্রয়োগ করেন, map
বা fmap
, মানগুলির তালিকায় তারা একই ফলাফল তৈরি করে তবে এর অর্থ এই নয় যে তারা একই উদ্দেশ্যে তৈরি meant
এই দুটি ফাংশন সম্পর্কে তথ্যের জন্য জিজ্ঞাসা করতে একটি জিএইচসিআই অধিবেশন (গ্লাসগো হাস্কেল কম্পাইলার ইন্টারেক্টিভ) চালান, তারপরে তার প্রয়োগগুলি একবার দেখুন এবং আপনি অনেকগুলি পার্থক্য আবিষ্কার করতে পারবেন।
মানচিত্র
সম্পর্কিত তথ্যের জন্য জিএইচসিআই জিজ্ঞাসা করুন map
Prelude> :info map
map :: (a -> b) -> [a] -> [b]
এবং আপনি এটি একটি উচ্চ-অর্ডার ফাংশন কোন প্রকার মান একটি তালিকা প্রযোজ্য হিসাবে সংজ্ঞায়িত দেখতে পাবেন 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
...
এই 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)