BoostのMPLさわってみる

眠れないので

1
(+ 1 2)
(lambda (n) (+ 1 n))
((lambda (n) (+ 1 n)) 2)

的なλ式をBoostのMPLで書いてみたらどうなるか調べてやってみた。
どこかで聞いたことある「MPLの主な用途は算術計算ではない」というnoticeはneglectな方向で。(ルー的に

#include <boost/mpl/arithmetic.hpp>
#include <boost/mpl/lambda.hpp>
namespace mpl = boost::mpl;
int main()
{
  // 1
  mpl::int_<1>::value;
  // (+ 1 2)
  mpl::plus<mpl::int_<1>, mpl::int_<2> >::value;
  // (lambda (n) (+ 1 n))
  mpl::lambda<mpl::plus<mpl::int_<1>, mpl::_1> >::type;
  // ((lambda (n) (+ 1 n) 2)
  mpl::lambda<mpl::plus<mpl::int_<1>, mpl::_1> >::type::apply<mpl::int_<2> >::type::value;
  return 0;
}

長っ!
...ってか、キモっ!
ちょっと込み入ったλ式だと、すぐ書けんようになる。


いつか書いた

  • 継続渡しの階乗計算
  • Y Combinatorでの階乗計算

などをMPLで書いてみようとしたけどあっさり挫折。