我想多次评估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函数? 我的问题有更好的解决方案吗?