ল্যাম্বডায় কোনও ল্যাম্বডা অবজেক্টের ঠিকানা সরাসরি পাওয়ার কোনও উপায় নেই।
এখন, এটি যেমন হয় প্রায়শই দরকারী। সর্বাধিক সাধারণ ব্যবহারটি পুনরাবৃত্তি করার জন্য।
y_combinator
ভাষায় যেখানে আপনি যেখানে সংজ্ঞায়িত যতক্ষণ নিজের সম্পর্কে কথা বলতে না পারে থেকে আসে। এটি সি ++ তে খুব সহজেই প্রয়োগ করা যেতে পারে :
template<class F>
struct y_combinator {
F f;
template<class...Args>
decltype(auto) operator()(Args&&...args) const {
return f( f, std::forward<Args>(args)... );
}
template<class...Args>
decltype(auto) operator()(Args&&...args) {
return f( f, std::forward<Args>(args)... );
}
};
এখন আপনি এটি করতে পারেন:
y_combinator{ [](auto& self) {
std::cout<<"Address of this lambda function is => "<< &self;
} }();
এর বিভিন্নতা অন্তর্ভুক্ত করতে পারে:
template<class F>
struct y_combinator {
F f;
template<class...Args>
decltype(auto) operator()(Args&&...args) const {
return f( *this, std::forward<Args>(args)... );
}
template<class...Args>
decltype(auto) operator()(Args&&...args) {
return f( *this, std::forward<Args>(args)... );
}
};
যেখানে প্রথম আর্গুমেন্ট হিসাবে self
পাস না করে পাস বলা যেতে পারে self
।
দ্বিতীয়টি বিশ্বাস করে সত্যিকারের y কম্বিনেটর (ওরফে ফিক্সড পয়েন্ট কম্বিনেটর) আমি বিশ্বাস করি। আপনি যা চান তা নির্ভর করে 'ল্যাম্বদার ঠিকানা' দ্বারা আপনি কী বোঝাতে চান তার উপর depends