(Optional) C++ - Lambda Expressions
Authors: Benjamin Qi, Dong Liu
Defining anonymous function objects.
Introduction
| Resources | ||||
|---|---|---|---|---|
| CPP | reference | |||
| UMich | ||||
| SO | ||||
| Microsoft | ||||
Recursive Lambdas
With y_combinator
| Resources | ||||
|---|---|---|---|---|
| open-std | ||||
| RIP Tutorial | ||||
If we add the following from the link above in C++14:
namespace std {template<class Fun>class y_combinator_result {Fun fun_;public:template<class T>explicit y_combinator_result(T &&fun): fun_(std::forward<T>(fun)) {}template<class ...Args>
Then we can have code like the following:
int main() {cout << y_combinator([](auto gcd, int a, int b) -> int {return b == 0 ? a : gcd(b, a % b);})(20,30) << "\n"; // outputs 10}
With function
Instead of auto, use function<return_type(param)>.
int main() {function<int(int, int)> gcd = [&](int a, int b) {return b == 0 ? a : gcd(b, a % b);};cout << gcd(20, 30) << '\n'; // outputs 10}