FC++ lambda

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);


C++ラムダ式の再帰までやるとは・・・なんという変態


FC++ まとめ