我试图在C#中表示代数表达式,例如多项式和非多项式。目前我有以下课程
class Variable {
public char Var {get; set;}
public int Exponent {get; set;}
...
}
class Term {
public IList<Variable> {get; set;}
public int CoEfficient {get; set;}
...
}
class Expression {
public IList<Term> {get; set;}
...
}
这允许我表示简单的多项式,例如x ^ 2 + 3x-8,但我希望能够将这样的表达式表示为(x + 3)(x-2)和3x(y + 2)。我一直试图找出这个术语,我认为第一个是表达式'(x + 3)(x-2)'包含两个表达式'x + 3'和'x-2'各包含两个术语'x','3'和'x',' - 2'。第二个是表达式'3x(y + 2)',其中包含一个表达式'y + 2'乘以术语'3x'我在想,而不是Expression类中的术语列表,它是一个对象列表,它是Expression和Term的基类,并使用某种递归
我怎样才能在课程中代表这一点?
我还希望能够表示分数和其他非多项式
这如何适应图片?
答案 0 :(得分:2)
拥有表达式的基类可以让你用其他表达式构建表达式。
public abstract class BaseExpression
{
}
public class VariableExpression : BaseExpression
{
public string Var {get; set;}
public int Exponent {get; set;}
}
public class ConstExpression : BaseExpression
{
public object Val {get; set;}
}
public class BinExpression : BaseExpression
{
public BaseExpression Left { get; set; }
public BaseExpression Right { get; set; }
public string Operator { get; set; }
}
例如x(y-1)
将是
var xy_1 = new BinExpression()
{
Left = new VariableExpression() { Var = "x" },
Right = new BinExpression()
{
Left = new VariableExpression() { Var = "y" },
Right = new ConstExpression() { Val = "1" },
Operator = "-"
},
Operator = "*"
}