符号数学是一个有趣的项目。在你的问题上,是否有人使用它似乎无关紧要,所以请投入。
这些年来我写了两本。最酷的是一个for SQL where子句——它对SQL做了一些琐碎的符号操作来折叠一些附加的和条件。不是一个完整的“解算器”或“优化器”或任何东西,只是一些可能的任何SQL where子句的符号操作。对于调试器来说就不那么酷了;它通过复杂的数学运算(象征性地)计算出变量的堆栈偏移量。
首先定义数学表达式元素的类——操作数、运算符、函数等
您必须决定这些对象必须参与哪些操作。获取表达式的具体值是一个简单而明显的过程。从所有变量都有绑定的情况开始。
然后处理一些变量保持未绑定的情况,并且只能计算表达式的一部分。
然后处理将表达式重新排列为规范形式。一、 你做了一个部分评估,得到了Add( Variable(x), Add( Variable(x), Lit(3) ) )。您需要编写规则将其转换为Add( Multiply( Lit(2), Variable(x) ), Lit(3) )。
一个非常酷的练习是优化圆括号,以便打印的输出包含捕获含义所需的最少圆括号。
有很多,很多其他的“表达式转换”规则,我们都在学校学习做代数操作。很多。
特别是,在某些情况下,重新排列方程以分离变量可能非常困难。
做导数变换是很容易的,但是符号积分在很多特殊情况下确实很难。
基本的都很有趣。取决于你想走多远,它会越来越难。