public Operation(DoubleMethod <T> method)
 {
     _method = method;
 }
 public Operation(DoubleMethod <T> method, INode <T> left, INode <T> right) : this(left, right)
 {
     _method = method;
 }
        public INode <double> GetPowOperation(INode <double> first, INode <double> second)
        {
            DoubleMethod <double> pow = new DoubleMethod <double>(Operation.POW, (double one, double two) => Math.Pow(one, two));

            return(new Operation <double>(pow, first, second));
        }
        public INode <double> GetDivideOperation(INode <double> first, INode <double> second)
        {
            DoubleMethod <double> divide = new DoubleMethod <double>(Operation.DIVIDE, (double one, double two) => one / two);

            return(new Operation <double>(divide, first, second));
        }
        public INode <double> GetMultiplyOperation(INode <double> first, INode <double> second)
        {
            DoubleMethod <double> multiply = new DoubleMethod <double>(Operation.MULTIPLY, (double one, double two) => one * two);

            return(new Operation <double>(multiply, first, second));
        }
        public INode <double> GetSubtractOperation(INode <double> first, INode <double> second)
        {
            DoubleMethod <double> substract = new DoubleMethod <double>(Operation.SUBTRACT, (double one, double two) => one - two);

            return(new Operation <double>(substract, first, second));
        }
        public INode <double> GetAddOperation(INode <double> first, INode <double> second)
        {
            DoubleMethod <double> add = new DoubleMethod <double>(Operation.ADD, (double one, double two) => one + two);

            return(new Operation <double>(add, first, second));
        }