给出一些MathML内容:
<apply>
<eq/>
<ci>c</ci>
<apply>
<plus/>
<ci>a</ci>
<ci>b</ci>
</apply>
</apply>
和
std::map<std::string,std::double> cal;
cal["a"] = 1.;
cal["b"] = 2.;
cal["c"] = 0; // does not matter what c is
我希望评估MathML并检索结果。有没有办法做到这一点?
答案 0 :(得分:3)
MathML具有语义和表示标记。因此,用于评估的通用MathML解析器是不可能的。
我不知道实际的实现,一些快速的谷歌搜索没有找到任何合理的结果,但它基本上归结为写波兰表达式解释器(因为你给出的例子是波兰表示法)。步骤:
最后,你将把你的结果放在堆栈上。
答案 1 :(得分:0)
一种方法是找到一个可以导入mathml的计算机代数系统(CAS)。不幸的是,虽然很多软件都输出了mathml,但几乎所有软件都没有读取它。以下是几个cas系统的一些相关链接:
CasADi(不是严格的CAS,但可以评估表达式): https://sourceforge.net/apps/trac/casadi/ticket/149
sympy: http://code.google.com/p/sympy/issues/detail?id=2971
MATLAB / mupad: http://www.mathworks.nl/help/toolbox/mupad/generate/MathML.html