FC++ のラムダ式
階乗
#include <iostream> #include <boost/function.hpp> #define BOOST_FCPP_ENABLE_LAMBDA #include <boost/fcpp/prelude.hpp> using namespace boost; using namespace boost::fcpp; int main() { // declaring lambda variables lambda_var<1> X; lambda_var<2> Y; lambda_var<3> F; function<int(int)> factorial = lambda(X)[ letrec[ F == lambda(Y)[ if1[ Y %equal% 0, 1, Y %multiplies% F[Y%minus%1] ] ] ].in[ F[X] ] ]; // int factorial(int x) { return x == 0 ? 1 : x * factorial(x - 1); } std::cout << factorial(3) << std::endl; return 0; }
これはなんとか読めるかな(自分では書けないけど)
let の使用例
int value = lambda(X) [ let[ Y == X %plus% 3, F == minus[2] ].in[ F[Y] ] ](3);