public override double Eval(VarMap v, FuncMap f)
 {
     double[] values = new double[children.Length];
     for (int i = 0; i < values.Length; i++)
     {
         values[i] = children[i].Eval(v, f);
     }
     return @operator.Eval(values);
 }
 public override double Eval(VarMap v, FuncMap f)
 {
     double[] values = new double[children.Length];
     //System.out.print("func children "+children.length);
     for (int i = 0; i < values.Length; i++)
     {
         values[i] = children[i].Eval(v, f);
     }
     return @operator.Eval(values);
 }
 public virtual double Eval(VarMap v, FuncMap f)
 {
     double a = child.Eval(v, f);
     return @operator.Eval(new double[] { a });
 }
 public override double Eval(VarMap v, FuncMap f)
 {
     double value = children[0].Eval(v, f);
     //System.out.print("("+value+")");
     return value;
 }
 public virtual Expression ReduceExpression(VarMap v, FuncMap f)
 {
     if (this.IsLeaf())
     {
         return null;
     }
     Expression newExpr = this.DeepCopy();
     Expression reductase = DeepestReducableNode(newExpr);
     Expression replacement = new NumberNode(reductase.Eval(v, f));
     //System.out.println("copy: " +newExpr);
     //System.out.println("rem " +reductase);
     //System.out.println("add "+ replacement);
     if (newExpr == reductase)
     {
         //System.out.println(" copy == high p");
         return replacement;
     }
     else
     {
         //System.out.println("replacement");
         ReplaceNodeInTree(newExpr, reductase, replacement);
         return newExpr;
     }
 }
 /// <summary>Returns the result of evaluating the expression tree rooted at this node.
 /// 	</summary>
 /// <remarks>Returns the result of evaluating the expression tree rooted at this node.
 /// 	</remarks>
 public abstract double Eval(VarMap v, FuncMap f);
 /// <summary>Returns the value.</summary>
 /// <remarks>Returns the value.</remarks>
 public override double Eval(VarMap v, FuncMap f)
 {
     return val;
 }
 /// <summary>Returns the value.</summary>
 /// <remarks>Returns the value.</remarks>
 public override double Eval(VarMap v, FuncMap f)
 {
     return v.GetValue(name);
 }