2

我正在尝试构建一个可以处理符号差异的 EDSL。我在功能方面遇到了麻烦。

struct Derivative
: or_<
    when<
        terminal<unknown>
        , boost::mpl::int_<1>()
    >
    , when<
        terminal<_>
        , boost::mpl::int_<0>()
    >
    , proto::when<
        proto::function<proto::literal<function<1> >, Derivative>
        , proto::_make_function(proto::_left, Derivative(proto::_right))
    >
    , proto::when<
        proto::function<proto::literal<function<2> >, Derivative>
        , proto::_make_function(proto::_left, Derivative(proto::_right))
    >
    , otherwise<_>
> {};

在该结构的最后一部分中,我分别捕获函数,因为我希望能够传递除proto::_left要应用的函数之外的其他内容。

例如。proto::literal<function<2> >对应于 tanh 函数,我的上下文会将其评估为 tanh。但是当我在我的表达中看到 tanh 我想要在我的Derivative结构中的导数时,我想要能够说

proto::when<
  proto::function<proto::literal<function<2> >, Derivative>
  , proto::_make_function(proto::literal<function<7> >, Derivative(proto::_right))
>

proto::literal<function<7> >对应于tanh的梯度。

当我尝试这样做时,我的代码无法编译。

我怎样才能正确地做到这一点?

4

0 回答 0