要求
1,计算表达式
2,储存函数,并参与运算
输入:2*3/6+2^0.5
输出:2.414
输入:f(a,b)=a*b
输入:2^f(2,2)
输出:16.0
结果示范
数据结构
解析字符串: 2*3/6+2^0.5
所有叶子节点均为变量,所有非叶子节点均为运算符,函数也是一种运算符
基本对象
接口 AvailableValue:
描述所有节点均可取值,非根节点的值为它的子节点的值
抽象类 BinaryTree:
构建树节点,BinaryTree为AvailableValue的子类
常值类 Numerical:
继承BinaryTree,描述一个常值节点
变量类 Variable:
继承Numerical,描述一个变量节点
至于为什么要变量继承常量这里需要特别说明
变量只允许出现再函数中,变量在赋值后将拥有常量属性,从数学发展上看也是现有常数再有变量的。
可以将所有叶子节点作为变量类,取消常值类,并将向量作为基本数学类型。
显然对于简单计算完全没必要。
接口 Hierarchical:
描述一个运算符的优先级。
1级 + -
2级 * /
3级 幂
4级 函数
5级 逗号
6级 括号