সংযুক্তকারী কি?
আমি খুজতেছি:
- একটি বাস্তব ব্যাখ্যা
- তারা কীভাবে ব্যবহৃত হয় তার উদাহরণ
- সংযুক্তিরা কীভাবে কোডের মানের / সাধারণতা উন্নত করে তার উদাহরণ
আমি খুঁজছি না:
- সংযুক্তকারীগুলির ব্যাখ্যা যা আমাকে কাজ করতে সহায়তা করে না (যেমন ওয়াই-কম্বিনেটর)
সংযুক্তকারী কি?
আমি খুজতেছি:
আমি খুঁজছি না:
উত্তর:
ব্যবহারিক দৃষ্টিকোণ থেকে সংযুক্তকারীরা হলেন এক ধরণের প্রোগ্রামিং কনস্ট্রাক্টস যা আপনাকে আকর্ষণীয় এবং প্রায়শই উন্নত রীতিতে যুক্তির টুকরো একসাথে রাখতে দেয়। সাধারণত এগুলি ব্যবহার করণীয় কোডগুলিকে বস্তুগুলিতে প্যাক করতে সক্ষমতার উপর নির্ভর করে, প্রায়শই বলা হয় (reasonsতিহাসিক কারণে) ল্যাম্বডা ফাংশন বা ল্যাম্বডা এক্সপ্রেশন, তবে আপনার মাইলেজটি পৃথক হতে পারে।
একটি (দরকারী) সংমিশ্রকের একটি সাধারণ উদাহরণ হ'ল প্যারামিটার ব্যতীত দুটি ল্যাম্বদা ফাংশন নেয় এবং একটি নতুন তৈরি করে যা তাদের ক্রম অনুসারে চালিত করে। আসল সংযোজকটি জেনেরিক সিউডোকোডে এর মতো দেখায়:
func in_sequence(first, second):
lambda ():
first()
second()
এই সংমিশ্রণকারী যে গুরুত্বপূর্ণ জিনিসটি হ'ল দ্বিতীয় লাইনের বেনামে ফাংশন (ল্যাম্বডা ফাংশন); আপনি কল যখন
a = in_sequence(f, g)
ফলস্বরূপ বস্তু ক প্রথম চ () এবং তারপরে জি () চালানোর ফলাফল নয় , তবে এটি এমন একটি বস্তু যা আপনি পরে ক্রমিকভাবে f () এবং g () চালানোর জন্য কল করতে পারেন:
a() // a is a callable object, i.e. a function without parameters
আপনার অনুরূপভাবে তখন একটি সংযুক্তকারী থাকতে পারে যা সমান্তরালে দুটি কোড ব্লক চালায়:
func in_parallel(first, second):
lambda ():
t1 = start_thread(first)
t2 = start_thread(second)
wait(t1)
wait(t2)
এবং তারপর আবার,
a = in_parallel(f, g)
a()
দুর্দান্ত জিনিসটি হ'ল 'ইন_প্যারালাল' এবং 'ইন_ সিকোয়েন্স' উভয়ই একই ধরণের / স্বাক্ষরের সমন্বয়কারী, অর্থাৎ তারা উভয় দুটি প্যারামিটারলেস ফাংশন অবজেক্ট নেয় এবং একটি নতুন ফিরিয়ে দেয়। আপনি আসলে মত জিনিস লিখতে পারেন
a = in_sequence(in_parallel(f, g), in_parallel(h, i))
এবং এটি প্রত্যাশার মতো কাজ করে।
মূলত সুতরাং সংযুক্তকারীরা আপনাকে আপনার প্রোগ্রামের নিয়ন্ত্রণ প্রবাহকে (অন্যান্য জিনিসের মধ্যে) একটি পদ্ধতিগত এবং নমনীয় ফ্যাশনে তৈরি করার অনুমতি দেয়। উদাহরণস্বরূপ, আপনি যদি আপনার প্রোগ্রামে সমান্তরালতা চালানোর জন্য ইন_প্যারালাল (..) সংযুক্তকারী ব্যবহার করেন তবে আপনি ইন-প্যারালাল সংযুক্তকারী নিজেই প্রয়োগের সাথে সম্পর্কিত ডিবাগিং যুক্ত করতে পারেন। পরবর্তীতে, যদি আপনি সন্দেহ করেন যে আপনার প্রোগ্রামের সমান্তরালতা সম্পর্কিত বাগ রয়েছে, তবে আপনি প্রকৃতপক্ষে কেবল ইন-প্যারালাল রিম্প্লেমেন্ট করতে পারেন:
in_parallel(first, second):
in_sequence(first, second)
এবং একটি স্ট্রোকের সাথে, সমস্ত সমান্তরাল বিভাগগুলি অনুক্রমিক বিভাগে রূপান্তরিত হয়েছে!
সংযুক্তকারীগুলি সঠিকভাবে ব্যবহৃত হলে খুব দরকারী।
ওয়াই কম্বিনেটর অবশ্য বাস্তব জীবনে প্রয়োজন হয় না। এটি একটি সংমিশ্রণকারী যা আপনাকে স্ব-পুনরাবৃত্ত ফাংশন তৈরি করতে দেয় এবং আপনি ওয়াই সংযোজক ছাড়াই যে কোনও আধুনিক ভাষায় এগুলি সহজেই তৈরি করতে পারেন।
ওয়াই-কম্বিনেটরকে এমন কিছু হিসাবে ব্র্যান্ড করা ভুল যে "কাজ শেষ করতে সহায়তা করবে না"। আমি এটি বেশ কয়েকটি অনুষ্ঠানে খুব দরকারী বলে মনে করেছি। সর্বাধিক সুস্পষ্ট কেসটি হ'ল যখন আপনাকে কিছু এম্বেডড ব্যাখ্যিত ভাষা দ্রুত বুটস্ট্র্যাপ করতে হয়। আপনি প্রিমিটিভের একটি সংক্ষিপ্ত সেট প্রদান তাহলে, যথা sequence
, select
, call
, const
এবং closure allocation
, এটি একটি সম্পূর্ণ, নির্বিচারে জটিল ভাষা উপরের নির্মাণের জন্য ইতিমধ্যে যথেষ্ট। পুনরাবৃত্তির জন্য কোনও বিশেষ সহায়তার প্রয়োজন নেই - এটি একটি নির্দিষ্ট পয়েন্ট সংযোজকের মাধ্যমে যুক্ত করা যেতে পারে। অন্যথায় আপনার আরও জটিল আদিম প্রয়োজন হবে।
সংযুক্তকারীদের জন্য আরেকটি সুস্পষ্ট কেস হ'ল অবক্ষেপণ। এসকেআই ক্যালকুলাসে অনূদিত একটি কোড কার্যত অপঠনযোগ্য। আপনি যদি সত্যিই কোনও অ্যালগরিদমের প্রয়োগকে অস্পষ্ট করতে চান তবে সংযুক্তকারীগুলি ব্যবহার করে বিবেচনা করুন, এখানে একটি উদাহরণ ।
এবং, অবশ্যই, সংযোজকগুলি কার্যকরী ভাষা প্রয়োগের জন্য একটি গুরুত্বপূর্ণ সরঞ্জাম। সবচেয়ে সহজ পদ্ধতির (উপরের উদাহরণ হিসাবে) এসকেআই বা সমমানের ক্যালকুলাসের মাধ্যমে। সুপারকম্বিনেটরগুলি অন্য কয়েকটি বাস্তবায়নে ব্যবহৃত হয়। এই বইটি গভীরতার সাথে এটি সম্পর্কে আলোচনা করে।
এটি একটি রসিকতা , তবে খুব যত্ন সহকারে পড়ার মতো একটি কৌতুক, যেহেতু অনেকগুলি আরকেন প্রোগ্রামিং কৌশল এবং তত্ত্বগুলি সেখানে আচ্ছাদিত।
কিছুটা খোঁড়াখুঁজি করে আমি একটি স্ট্যাক ওভারফ্লো প্রশ্ন পেয়েছি , "কম্বিনেটর" (অ গণিতবিদদের জন্য) এর ভাল ব্যাখ্যা যা এই প্রশ্নের ঘনিষ্ঠ চাচাত ভাই। উত্তরগুলির মধ্যে একটি রেগিনাল্ড ব্রাইথওয়েটের ব্লগ, হোমসিওনিককে নির্দেশিত , যা কোডে সংযুক্তকারীগুলির বেশ কয়েকটি দরকারী উদাহরণের সাথে লিঙ্কযুক্ত (উদাহরণস্বরূপ কে সংযুক্তকারী , রুবির Object#tap
পদ্ধতিতে প্রয়োগ করা হয়েছে - এটি কেন কার্যকর তা উদাহরণের জন্য পৃষ্ঠাটি পড়ুন)।
সমন্নয়ের লজিক উইকিপিডিয়ার পৃষ্ঠা আরো বিশ্বব্যাপী combinators বর্ণনা করা হয়েছে।