多次评估AST给出的公式

时间:2017-11-29 18:44:44

标签: c++

我想多次评估AST节点给出的公式。 例如

result = a y - b x

a,b是常数,x,y是随时间变化的变量。

      <math xmlns="http://www.w3.org/1998/Math/MathML">
        <apply>
          <minus/>
          <apply>
            <times/>
            <ci> a </ci>
            <ci> y </ci>
          </apply>
          <apply>
            <times/>
            <ci> b </ci>
            <ci> x </ci>
          </apply>
        </apply>
      </math>

我编写了一个递归函数(double evaluateAST(x,y)),它读取AST,替换常量和变量的值并计算结果。 但是因为我想经常评估公式,这是一个非常缓慢的解决方案。

我想选择一个解决方案,我只评估一次AST并得到像

这样的函数
double f(x,y){return VALUE_OF_a*y - VALUE_OF_b*x}

我是C ++的新手,但我找到了Lambda函数。 这是解决我问题的方法吗?

auto result  = [](double x, double y){return evaluateAST(x,y)}

我不确定这个解决方案是否有效,因为我害怕我在调用lambda函数时经常评估函数evaluateAST(x,y)。

我是否想念lambda函数? 我的问题有更好的解决方案吗?

0 个答案:

没有答案