Fortran或TeX到Haskell

Fortran或TeX到Haskell,haskell,latex,Haskell,Latex,我已经在FriCAS(Axiom fork)中对一个积分进行了符号计算,我想将结果粘贴为Haskell中的函数。但是,FriCAS只能将输出导出为TeX、Fortran、MathML、html、texmacs 有没有办法将TeX公式解析为Haskell?还有其他建议吗 该公式包含+-*/^sqrt atan将TeX解析为Haskell似乎很痛苦,特别是因为它是一种图灵完整语言;似乎一揽子计划还没有具体内容 如果您希望出于格式化目的执行此操作,那么我建议使用XML解析器(如or)解析MathML,

我已经在FriCAS(Axiom fork)中对一个积分进行了符号计算,我想将结果粘贴为Haskell中的函数。但是,FriCAS只能将输出导出为TeX、Fortran、MathML、html、texmacs

有没有办法将TeX公式解析为Haskell?还有其他建议吗


该公式包含
+-*/^sqrt atan

将TeX解析为Haskell似乎很痛苦,特别是因为它是一种图灵完整语言;似乎一揽子计划还没有具体内容

如果您希望出于格式化目的执行此操作,那么我建议使用XML解析器(如or)解析MathML,并对其进行处理

您将遇到的主要问题是TeX和MathML都将描述公式的外观,而不是其语义。1在您列出的所有格式中,只有Fortran将指定后者,但它也是最难与Haskell接口的格式。最实用的选择可能是单独编译Fortran代码,并将Haskell的代码与FFI一起使用

当然,如果您正在处理的公式都像您的问题所建议的那样简单,那么您可以从MathML中提取函数


1 MathML具有描述语义而不是外观的能力,但我认为它没有被广泛使用,我怀疑它是否精确到足以让计算机进行评估。

答案是针对FriCAS的。可以生成spad字符串形式的输出,如中所述。对我来说是

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)
Spad语法与Haskell非常相似,但是
unparse
sqrt
表示为
^(1/(2.0))
。使其成为
**0.5
是一项肮脏的技术,但毕竟使用解析公式而不是二维数值积分所带来的速度增益掩盖了
**

**(1/(2.0))
的低效性,也应该同样有效;i、 e.你应该能够用
**
替换
^
,一切都会好起来。