25

我正在构建一种基于 Web 的编程语言,部分灵感来自 Prolog 和 Haskell(别笑)。

它已经有了相当多的功能,您可以在http://www.lastcalc.com/查看原型。您可以在此处查看源代码并在此处阅读有关架构的信息。请记住,这是一个原型。

目前 LastCalc 无法简化表达式或求解方程。我不想在 Java 中硬编码,而是想增强基本语言,使其可以扩展为只使用语言本身(如 Prolog)来完成这些事情。与 Prolog 不同,LastCalc 有更强大的搜索算法,Prolog 是“带有回溯的深度优先搜索”,LastCalc 目前使用的是启发式最佳优先搜索。

在深入研究之前,我想更多地了解其他系统如何解决这个问题,尤其是 Mathematica / Wolfram Alpha。

我假设这个想法,至少在一般情况下,是你给系统一堆规则来操作方程(比如a*(b+c) = a*b + a+c)指定目标(例如隔离变量 x)然后放开它。

所以,我的问题是:

  • 我的假设正确吗?
  • 应用规则的搜索策略是什么?例如。深度优先,广度优先,深度优先,迭代加深,某种最好的优先?
  • 如果它是“最好的优先”,那么使用什么启发式方法来确定特定规则应用是否有可能使我们更接近我们的目标?

我也很感激任何其他建议(“放弃”除外——我经常忽略那条建议,这样做对我很有帮助;)。

4

2 回答 2

10

前段时间我自己也处理过这样的问题。然后我找到了这个关于简化表达式的文档。它的标题是基于规则的表达式简化,并展示了有关 Mupad 中简化的一些细节,后来成为 Matlab 的一部分。

根据本文档,您的假设是正确的。有一组用于操作表达式的规则。启发式质量度量被用作简化的目标函数。

于 2013-09-10T20:26:12.607 回答
2

Wolfram alpha 由 Mathematica 开发

  • mathematica 是 stephen wolphram 的创意。Mathematica 1.0 于 1988 年发布。mathematica 很像 maple,它们都严重依赖于像 LaPack 这样的旧软件库。
  • 这些程序的库基于并且通常简单地是遗留软件。它们已经存在并修改了很长时间。

如果您想了解正在运行的后台程序,sagemath 是一个免费的开源替代方案;您可以对您的问题的解决方案进行逆向工程:

SageMath.org

于 2013-09-15T02:41:31.563 回答