2012-01-15 1 views
3

FriCAS(Axiom fork)の積分を記号的に評価し、その結果をHaskellの関数として貼り付けたいと思います。しかし、FriCASは出力をTeX、Fortran、MathML、html、texmacsとしてのみエクスポートできます。FortranまたはTeX to Haskell

TeX式をHaskellに解析する方法はありますか?その他の提案はありますか?

式は、それがチューリング完全言語です特にとして、痛みを伴うかもしれないように思えるハスケルに+ - */^ sqrt atan

答えて

2

答えはFriCASに固有です。 FriCAS mailing listに記載されているように、出力をスパッド文字列として生成することができます。私にとっては、しかし、unparse^(1/(2.0))としてsqrt表し、

unparse(rootSimp((integrate(integrate(halfL - sqrt(r^2-x^2-y^2), y = (sqrt(r^2-halfL^2-x^2))..halfL, "noPole"), x = (sqrt(r^2-2*halfL^2))..halfL,"noPole")) :: Expression(DoubleFloat)) :: INFORM) 

スパッド構文はHaskellのに非常に似ていました。それを**0.5にするのは面倒ですが、2D数値積分の代わりに解析式を使用することで速度が向上するのは、**の非効率性です。

+0

'**(1 /(2.0))'も同様に動作します。すなわち、あなたは '^'を '**'に置き換えることができなければならず、すべてがうまくいくはずです。 – luqui

3

解析TeXに含まれています。 HaTeXパッケージにはplans to implement a parserがありますが、まだ具体的なものはありません。

フォーマットを行う場合は、XMLパーサー(たとえばxml-conduitまたはhxtなど)を使用してMathMLを解析し、その代わりに処理することをお勧めします。あなたがに実行されます

主な問題は、TeXやMathMLの両方が、むしろそのセマンティクスよりも、式の外観を説明しようとしているということです。 あなたがリストしたすべてのフォーマットの中で、Fortranだけが後者を指定しますが、Haskellとのインターフェースが最も難しいでしょう。最も実用的な選択肢は、おそらくFortranコードを別々にコンパイルし、HaskellからFFIでそれを使用することです。

もちろん、あなたが扱っている数式がすべてあなたの質問が示唆するように簡単なものであれば、MathMLから関数を抽出することで手に入るかもしれません。

MathMLはむしろ外見よりも、意味を記述するための能力を持っているが、私はそれが広く使われているとは思わない、と私はそれを評価するために、コンピュータのための十分な正確だ疑い。

関連する問題