8

いくつかの 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 を評価して結果を取得したいと考えています。これを行う方法はありますか?

4

2 に答える 2

3

MathML には、セマンティック マークアップとプレゼンテーション マークアップの両方があります。したがって、評価用の一般的な MathML パーサーは使用できません。

実際の実装については知りません。いくつかの簡単なグーグルでは妥当な結果が見つかりませんでしたが、基本的には、ポーランド語の式インタープリターを作成することになります(あなたが示した例はポーランド語表記であるため)。手順:

  1. XML パーサーを取得してドキュメントを読み取る
  2. 木の中を歩く
  3. 既知の操作または要素に遭遇した場合は、スタックにポップします
  4. 部分式が完了したら、それを解析します (または、式全体が終了するのを待ち、最後の操作を探し、アリティが規定する数の引数で実行し、操作がなくなるまでこれを実行します)

最後に、スタックに結果が表示されます。

于 2010-06-04T10:40:34.790 に答える
2

1つの方法は、mathmlをインポートできる数式処理システム(CAS)を見つけることです。残念ながら、多くのソフトウェアがmathmlをエクスポートしますが、ほとんどのソフトウェアが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

于 2012-07-28T16:47:04.970 に答える