eval_letrec

Synopsis

template <class Name, class Exp, class Body>
struct eval_letrec
{
  // unspecified
};

Description

This is similar to letrec, but it evaluates the substituted expression.

#include <mpllibs/metamonad/eval_letrec.hpp>

Expression semantics

For any n, x and f classes

eval_letrec<n, x, f>

is equivalent to

eval_syntax<letrec<n, x, f>>

Example

using boost::mpl::times;
using boost::mpl::plus;
using boost::mpl::minus;
using boost::mpl::int_;
using boost::mpl::equal_to;

struct fact;

typedef
  eval_letrec<
    fact,
    syntax<
      lambda_c<
        n,
        if_<
          equal_to<n, int_<0>>,
          int_<1>,
          lazy<times<apply<fact, minus<n, int_<1>>>, n>>
        >
      >
    >,
    lazy<apply<fact, int_<3>>>
  >::type
  fact_3;

[up]