我正在构建一种基于Web的编程语言,部分受到Prolog和Haskell的启发(不要笑)。

它已经具有很多功能,您可以在http://www.lastcalc.com/上检查原型(prototype)。您可以查看源here并阅读有关体系结构here的信息。记住这是一个原型(prototype)。

当前,LastCalc无法简化表达式或求解方程式。除了使用Java对其进行硬编码之外,我还想增强基本语言,以便可以扩展该语言以使用这些语言本身(例如Prolog)来完成这些事情。与Prolog不同,LastCalc具有更强大的搜索算法,Prolog是“具有回溯功能的深度优先搜索”,LastCalc当前使用启发式最佳优先搜索。

在深入研究之前,我想了解更多有关其他系统如何解决此问题的信息,尤其是Mathematica / Wolfram Alpha。

我认为,至少在一般情况下,您的想法是为系统提供一堆用于处理方程式的规则(例如a*(b+c) = a*b + a+c),以指定目标(例如,隔离变量x),然后放开它。

因此,我的问题是:

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

  • 我也很感谢其他建议(“放弃”除外-我经常忽略该建议,这样做对我很有帮助;)。

    最佳答案

    一段时间之前,我本人已经解决了此类问题。然后,我发现有关简化表达式的this document。它的标题是“基于规则的表达式简化”,并显示了有关Mupad中简化的一些细节,而Mupad后来成为Matlab的一部分。

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

    09-09 21:10