我正在构建一个基于网络的编程语言,部分受到Prolog和Haskell的启发(不要笑)。
它已经具有相当多的功能,您可以在http://www.lastcalc.com/查看原型。您可以查看来源here并阅读有关架构here的内容。记住它是原型。
目前,LastCalc无法简化表达式或求解方程式。我不想在Java中对其进行硬编码,而是希望增强基本语言,以便可以使用语言本身来扩展它来执行这些操作(与Prolog一样)。与Prolog不同,LastCalc具有更强大的搜索算法,Prolog是“深度优先搜索带回溯”,LastCalc目前使用启发式最佳优先搜索。
在深入研究之前,我想更多地了解其他系统如何解决这个问题,特别是Mathematica / Wolfram Alpha。
我认为这个想法,至少在一般情况下,是你给系统一套规则来操纵方程式(如a*(b+c) = a*b + a+c
)指定目标(例如。隔离变量x)然后让它松了。
所以,我的问题是:
我也很欣赏任何其他建议(除了“放弃” - 我经常忽略这条建议,这样做对我有好处;)。
答案 0 :(得分:10)
我前段时间处理过这些问题。然后我找到this document关于表达式的简化。它名为基于规则的表达式简化,并显示了有关Mupad简化的一些细节,后来成为了Matlab的一部分。
根据这份文件,您的假设是正确的。有一套用于处理表达式的规则。启发式质量度量被用作简化的目标函数。
答案 1 :(得分:2)
Wolfram alpha由Mathematica开发
如果您想了解正在运行的后台程序,sagemath是一个免费的开源替代方案;您可以对问题的解决方案进行反向工程: