लैम्ब्डा के भीतर लैम्ब्डा ऑब्जेक्ट का पता प्राप्त करने का कोई तरीका नहीं है।
अब, जैसा कि होता है यह काफी उपयोगी है। पुनरावृत्ति करने के लिए सबसे आम उपयोग है।
उन y_combinator
भाषाओं से आता है जहाँ आप अपने बारे में बात नहीं कर सकते जब तक आप परिभाषित नहीं करते हैं। इसे c ++ में बहुत आसानी से लागू किया जा सकता है :
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
है।
दूसरा वास्तविक वाई कॉम्बिनेटर (उर्फ तय बिंदु कॉम्बीनेटर) से मेल खाता है, मेरा मानना है। जो आप चाहते हैं वह इस बात पर निर्भर करता है कि 'लैम्बडा के पते' से आपका क्या मतलब है।