解析数学方程

时间:2012-05-05 10:45:20

标签: parsing math haskell

只是为了踢,我正在尝试创建一个可以简化,分解和扩展代数方程的应用程序。如果我可以将方程式变成一个好的可行格式,那么对规则进行编程就好像是直截了当的。解析方程式证明是一个麻烦,目前正在使用Python,但我不反对必须学习新的东西。

是否有任何库(对于任何语言)可以使这个项目变得非常简单,或者是一个白日梦?

[用Haskell标记这个,因为我觉得'简单'就是这样的地方]

4 个答案:

答案 0 :(得分:6)

是的,Haskell有许多库使编写解析器变得相当容易。 Parsec是一个良好的开端,它甚至有clones in other languages,包括Python(该文章也链接到pyparsing,看起来它也可能有效。)

This answer of mine就是一个例子(注意,它可能不是顶级Parsec或Haskell):它表明了Haskell解析库的强大功能,恰好4行代码实现了整个解析器。

您还可以浏览旧问题和答案,以了解各种库和技术,例如: parsing+haskellparsing+python

为更大的项目制定攻击线的最佳方法是从小开始尝试,直到你对自己的工具感到满意为止:选择一个库并尝试实现一个相对简单的解析器,比如解析表达式仅使用数字+*,或者甚至只使用包围解析数字和+ ......一些小的(但不是太小;这两个例子都有非平凡性,第一个具有运算符优先级,第二个具有递归嵌套)。如果您不喜欢图书馆,请尝试使用其他图书馆。

答案 1 :(得分:4)

几乎所有语言都完成了它。

Python有一个用于解析代数方程和符号数学的库,所有这些都准备好了:

http://code.google.com/p/sympy/

我建议重复使用,除非你的目的是学习如何写这样的东西。

答案 2 :(得分:0)

Python或matlab将是我的建议。您是否计划将整个方程存储在一个字符串中,然后将其拆分,以便进行因子和简化?

提供更多信息,这是一个很酷的项目。

答案 3 :(得分:0)

这是一个老问题,但我想建议你使用MathParseKit。

这是一个C ++库,它给出了一个字符串,如" 2 * 3/4"给你一个定义表达式的函数/变量/常量树。

你可以解决它,但你甚至可以改变它并再次以字符串格式。

您可以在以下网址找到它:

https://github.com/B3rn475/MathParseKit