মানচিত্র এবং ভাঁজগুলি ব্যাখ্যা করার জন্য এটি একটি পরিপূরক উত্তর। নীচের উদাহরণগুলির জন্য, আমি এই তালিকাটি ব্যবহার করব। মনে রাখবেন, এই তালিকাটি পরিবর্তনযোগ্য, তাই এটি কখনই পরিবর্তন হবে না:
var numbers = [1, 2, 3, 4, 5]
আমি আমার উদাহরণগুলিতে সংখ্যাগুলি ব্যবহার করব কারণ তারা কোড পড়তে সহজ করে। তবে মনে রাখবেন, sতিহ্যগত অপরিহার্য লুপটি যে কোনও জিনিসের জন্য ভাঁজগুলি ব্যবহার করা যেতে পারে।
একটি মানচিত্র কোনও কিছুর একটি তালিকা এবং একটি ফাংশন নিয়ে যায় এবং ফাংশনটি ব্যবহার করে সংশোধিত একটি তালিকা দেয়। প্রতিটি আইটেম ফাংশনে স্থানান্তরিত হয়, এবং ফাংশনটি যা কিছু দেয় তা হয়ে যায়।
এর সহজতম উদাহরণটি কেবল তালিকার প্রতিটি সংখ্যায় একটি সংখ্যা যুক্ত করা। আমি এটিকে ভাষা অজ্ঞায়নের জন্য সিউডোকোড ব্যবহার করব:
function add-two(n):
return n + 2
var numbers2 =
map(add-two, numbers)
আপনি যদি মুদ্রিত হন তবে আপনি প্রতিটি উপাদানের সাথে 2 যোগ করে প্রথম তালিকাটি numbers2
দেখতে পাবেন [3, 4, 5, 6, 7]
। খেয়াল করুন ফাংশনটি ব্যবহারের জন্য add-two
দেওয়া হয়েছিল map
।
ভাঁজ গুলি সমান, আপনার যে ফাংশনটি দেওয়ার প্রয়োজন তা বাদ দিয়ে অবশ্যই তাদের 2 টি আর্গুমেন্ট নিতে হবে। প্রথম যুক্তিটি সাধারণত সংগ্রহকারী হয় (বাম ভাঁজে, যা সবচেয়ে সাধারণ)। লুপিংয়ের সময় পাস করা ডেটা হ'ল সংযোজক। দ্বিতীয় যুক্তি তালিকার বর্তমান আইটেম; ঠিক উপরের মত map
ফাংশন।
function add-together(n1, n2):
return n1 + n2
var sum =
fold(add-together, 0, numbers)
আপনি মুদ্রিত sum
হলে সংখ্যার তালিকার যোগফল দেখতে পাবেন: 15।
যুক্তিগুলি কী করতে হবে তা এখানে রয়েছে fold
:
এটি ফাংশন যা আমরা ভাঁজ দিচ্ছি। ভাঁজটি বর্তমান সঞ্চালক এবং তালিকার বর্তমান আইটেমটি ফাংশনটি পাস করবে। ফাংশনটি যাই হোক না কেন নতুন সংযোজক হয়ে যাবে, যা পরের বারে ফাংশনে পাঠানো হবে। আপনি যখন এফপি-স্টাইলটি লুপ করছেন তখন এইগুলি আপনি "স্মরণ" করবেন। আমি এটি একটি ফাংশন দিয়েছি যা 2 নম্বর নেয় এবং তাদের যুক্ত করে।
এটি প্রাথমিক সংগ্রহকারী; তালিকার যে কোনও আইটেম প্রক্রিয়াজাতকরণের আগে যেমন সঞ্চয়ের শুরু হয়। যখন আপনি সংখ্যার সংমিশ্রণ করবেন, আপনি কোনও সংখ্যার একসাথে যুক্ত করার আগে মোটটি কত? 0, যা আমি দ্বিতীয় যুক্তি হিসাবে পাস করেছি।
শেষ পর্যন্ত, মানচিত্রের মতো আমরা এটির প্রক্রিয়া করার জন্য সংখ্যার তালিকায়ও পাস করি।
যদি ভাঁজগুলি এখনও বোঝায় না, এটি বিবেচনা করুন। আপনি যখন লিখবেন:
# Notice I passed the plus operator directly this time,
# instead of wrapping it in another function.
fold(+, 0, numbers)
আপনি মূলত তালিকার প্রতিটি আইটেমের মধ্যে উত্তীর্ণ ফাংশনটি রেখে চলেছেন এবং প্রাথমিক সংগ্রহকারীকে বাম বা ডানদিকে (এটি যদি বাম বা ডান ভাঁজ হয় তার উপর নির্ভর করে) যোগ করছেন, সুতরাং:
[1, 2, 3, 4, 5]
হয়ে:
0 + 1 + 2 + 3 + 4 + 5
^ Note the initial accumulator being added onto the left (for a left fold).
15 এর সমান।
map
আপনি যখন একটি তালিকা একই দৈর্ঘ্যের অন্য তালিকায় পরিবর্তন করতে চান তখন একটি ব্যবহার করুন ।
fold
সংখ্যার তালিকার যোগফলের মতো আপনি যখন কোনও তালিকাকে একক মানে পরিণত করতে চান তখন ব্যবহার করুন ।
@ জর্জি মতামতগুলিতে যেমন উল্লেখ করেছেন যে, "একক মান" কোনও সংখ্যার মতো সহজ কিছু হওয়ার দরকার নেই; এটি কোনও তালিকা বা একটি টুপল সহ কোনও একক বস্তু হতে পারে! আমার জন্য যেভাবে ভাঁজগুলি আমার কাছে ক্লিক ছিল তা হ'ল ভাঁজের ক্ষেত্রে মানচিত্রটি সংজ্ঞায়িত করা । কীভাবে সংগ্রহকারী একটি তালিকা রয়েছে তা দ্রষ্টব্য:
function map(f, list):
fold(
function(xs, x): # xs is the list that has been processed so far
xs.add( f(x) ) # Add returns the list instead of mutating it
, [] # Before any of the list has been processed, we have an empty list
, list)
সত্য, একবার আপনি প্রতিটি বুঝতে পারলে, আপনি বুঝতে পারবেন যে কোনও লুপিং ভাঁজ বা মানচিত্র দ্বারা প্রতিস্থাপন করা যেতে পারে।