答案特定于FriCAS。可以将输出产生为spad字符串,如中所述 FriCAS邮件列表 。对我来说是
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 是一个肮脏的黑客,但毕竟使用分析公式而不是2D数字集成的速度增加涵盖了效率低下 ** 。
unparse
sqrt
^(1/(2.0))
**0.5
**
将TeX解析为Haskell似乎很痛苦,特别是因为它是图灵完备的语言;好像是 HaTeX 包有 计划实现解析器 但没有具体的。
如果你想为格式化目的这样做,那么我建议用XML解析器解析MathML(例如 XML的管道 要么 HXT )而是处理它。
您将遇到的主要问题是TeX和MathML都将描述 出现 公式,而不是它 语义 。 1 在你列出的所有格式中,只有Fortran会指定后者,但它也是最难与Haskell接口的。最实用的选项可能是单独编译Fortran代码并使用Haskell和FFI进行编译。
当然,如果你正在处理的公式都像问题所暗示的一样简单,那么你可以从MathML中提取函数。
1 MathML能够描述语义而不是外观,但我不认为它被广泛使用,我怀疑它对计算机的评估是否足够精确。