fork(1) download
  1. auto Y_ = [](auto h) {
  2. return ([](auto f) { return f(f); })
  3. ([h](auto f) {
  4. return h([f](auto ... n) {
  5. return f(f)(n...);
  6. });
  7. });
  8. };
  9.  
  10. #define REC(NAME, FUN) Y_([](auto NAME){ return [NAME] FUN;})
  11.  
  12. //////////////////////////////////////////////
  13.  
  14. #include <iostream>
  15.  
  16. int main()
  17. {
  18. // EXAMPLES
  19.  
  20. // factorial
  21. auto fact = REC(g,
  22. (auto n) {
  23. if (n < 2) return 1;
  24. return n * g(n - 1);
  25. });
  26.  
  27. // fibonacci
  28. auto fib = REC(g,
  29. (auto n) -> int {
  30. return n > 1 ? g(n - 1) + g(n - 2) : n;
  31. });
  32.  
  33. // binomial coefficient
  34. auto comb = REC(g,
  35. (auto x, auto y) {
  36. if (y == 0 || x == y) return 1;
  37. return g(x - 1, y - 1) + g(x - 1, y);
  38. });
  39.  
  40. std::cout << fact(6) << "\n";
  41. std::cout << fib(10) << "\n";
  42. std::cout << comb(10, 4) << "\n";
  43.  
  44. return 0;
  45. }
  46.  
Success #stdin #stdout 0s 3148KB
stdin
Standard input is empty
stdout
720
55
210