nested lambda

  • lazyにおまけでbind関数を変更するためのパラメータ(Bind)を付けて置いたがこれが重要だった
  • Bindにresult_of_lazy::typeを渡すとネストされたlazyな関数を作れる (実装)
  • これで機械的に複雑なlambda式が作れるようになった、かも
    • lvNはbll::protectをN回呼び出す
    • nest1はlazyと同じ
// \x -> (\y -> (\z -> foo(y,z,x)))
BOOST_CHECK( nest3(foo)(lv1(_1), lv2(_1), lv0(_1))
    (3)(6)(1) == foo(6,1,3) );

// \x -> apply(\y -> minus(x,y), plus(x,3))
BOOST_CHECK( nest1(apply)(nest2(minus)(lv0(_1), lv1(_1)), nest1(plus)(lv0(_1), 3))
    (9) == minus(9, plus(9,3))  );