我正在研究 C++ 中的模式匹配,以及诸如Mach7之类的东西,这似乎是解决问题的一种功能性方法,以及更通用的Visitor Pattern,这似乎是最小的公分母:它可以做任何事情,但只擅长具体案例。
我想操作数学表达式(简化,评估,并执行计算,如微分方程求解和积分,象征性地)。是的,我希望最终得到一个计算机代数系统。对于输入,我正在考虑使用 Boost.Spirit (X3) 来解析某种形式的输入(目前正在那里获得基本的 LaTeX 支持,尽管索引与子/上标是一个问题......)。
然后我想到了使用Boost.Spirit不仅解析输入的“文本”,还使用库的非解析器组件对生成的 AST 实际执行数学操作的疯狂想法。 这是否足以满足我的目标所需的模式,还是我应该看看其他解决方案?我试图找到关于其他 CAS 如何在内部工作的文档,但是没有通过像Maxima这样的毫无疑问的出色代码,除了非常简单的数学 AST 实现之外,我似乎找不到任何信息。所以我几乎没有输入信息来确定 Boost.Spirit 是否可以做我最终需要做的事情。