コード例 #1
0
        public void EvaluateTest()
        {
            var num  = "225,155";
            var expr = new NumberExpression(num);

            Assert.AreEqual(225.155, expr.Evaluate(), "Ошибка в вычилсении NumberExpression");
        }
コード例 #2
0
ファイル: Helper.cs プロジェクト: kurema/CalcApp
            public IExpression GetExpression(IExpression[] expressions)
            {
                if (Members != expressions.Count())
                {
                    throw new ArgumentException();
                }
                var powers = new IExpression[Members, Exponent + 1];

                for (int i = 0; i < Members; i++)
                {
                    for (int j = 0; j < Exponent + 1; j++)
                    {
                        powers[i, j] = expressions[Members - i - 1].Power(new NumberExpression(new NumberDecimal(j, 0))).Format().Expand();
                    }
                }

                IExpression result = NumberExpression.Zero;

                foreach (var item in this)
                {
                    IExpression term = new NumberExpression(new NumberDecimal(item.Coefficient, 0));
                    for (int i = 0; i < item.Exponents.Count(); i++)
                    {
                        term = term.Multiply(powers[i, item.Exponents[i]]).Format().Expand();
                    }
                    result = result.Add(term);
                }
                return(result.Format().Expand());
            }
コード例 #3
0
 public void SmallNumbersShouldBeCached()
 {
     for (int i = -128; i < 128; i++)
     {
         Assert.Same(NumberExpression.Create(i), NumberExpression.Create(i));
     }
 }
コード例 #4
0
        public override RawExpression SimplifyInternal()
        {
            RawExpression    sleft  = this.Left.Simplify();
            RawExpression    sright = this.Right.Simplify();
            NumberExpression nleft  = sleft as NumberExpression;
            NumberExpression nright = sright as NumberExpression;

            if (nleft != null && nleft.Number == 0)
            {
                return(new NegExpression
                {
                    Op = sright,
                });
            }
            else if (nright != null && nright.Number == 0)
            {
                return(sleft);
            }
            else
            {
                return(new SubExpression
                {
                    Left = sleft,
                    Right = sright,
                });
            }
        }
コード例 #5
0
        public void EvaluationTest()
        {
            var operand  = new NumberExpression("10");
            var addition = new AdditionBinaryExpression
            {
                LeftOperand  = operand,
                RightOperand = operand
            };

            var subraction = new SubtractionBinaryExpression
            {
                LeftOperand  = operand,
                RightOperand = operand
            };

            var division = new DivisionBinaryExpression
            {
                LeftOperand  = operand,
                RightOperand = operand
            };

            var multiplication = new MultiplicationBinaryExpression
            {
                LeftOperand  = operand,
                RightOperand = operand
            };

            Assert.AreEqual(20, addition.Evaluate(), "Ошибка в вычилсении AdditionBinaryExpression");
            Assert.AreEqual(0, subraction.Evaluate(), "Ошибка в вычилсении SubtractionBinaryExpression");
            Assert.AreEqual(1, division.Evaluate(), "Ошибка в вычилсении DivisionBinaryExpression");
            Assert.AreEqual(100, multiplication.Evaluate(), "Ошибка в вычилсении MultiplicationBinaryExpression");
        }
コード例 #6
0
ファイル: Parser.cs プロジェクト: natiiix/funk
        public static bool TryParseExpression(List <Token> tokens, out IExpression result)
        {
            // Number
            if (NumberExpression.TryParse(tokens, out NumberExpression numExpr))
            {
                result = numExpr;
                return(true);
            }
            // Symbol
            else if (SymbolExpression.TryParse(tokens, out SymbolExpression symExpr))
            {
                result = symExpr;
                return(true);
            }
            // Function definition
            else if (FunctionExpression.TryParse(tokens, out FunctionExpression funcExpr))
            {
                result = funcExpr;
                return(true);
            }
            // Function call
            else if (CallExpression.TryParse(tokens, out CallExpression callExpr))
            {
                result = callExpr;
                return(true);
            }

            result = null;
            return(false);
        }
コード例 #7
0
ファイル: DivExpression.cs プロジェクト: vczh-codeplex/vlpp
        public override RawExpression SimplifyInternal()
        {
            RawExpression    sleft  = this.Left.Simplify();
            RawExpression    sright = this.Right.Simplify();
            NumberExpression nleft  = sleft as NumberExpression;
            NumberExpression nright = sright as NumberExpression;

            if (nleft != null)
            {
                if (nleft.Number == 0)
                {
                    return(new NumberExpression
                    {
                        Number = 0,
                    });
                }
            }
            else if (nright != null)
            {
                if (nright.Number == 1)
                {
                    return(sleft);
                }
            }
            return(new DivExpression
            {
                Left = sleft,
                Right = sright,
            });
        }
コード例 #8
0
ファイル: Number.cs プロジェクト: erisonliang/yacq
 internal static Number Number(NumberExpression expression)
 {
     return(new Number()
     {
         SourceText = expression.SourceText,
     }.Apply(n => n.TypeHint = expression.TryType().Null(t => TypeRef.Serialize(t))));
 }
コード例 #9
0
        protected override string VisitNumberExpression(NumberExpression exp, out object retObject)
        {
            retObject = null;
            var output = exp.ToString();

            return(output);
        }
コード例 #10
0
        public void Equals_SameNumber_Test()
        {
            var num1 = new NumberExpression <double>(1.1);
            var num2 = 1.1;

            Assert.IsTrue(num1.Equals(num2));
        }
コード例 #11
0
ファイル: DonutSyntaxReader.cs プロジェクト: sp0x/donut
        private IExpression ReadConstant()
        {
            var         token  = Reader.DiscardToken();
            IExpression output = null;

            switch (token.TokenType)
            {
            case TokenType.NumberValue:
                output = new NumberExpression()
                {
                    Value = int.Parse(token.Value)
                };
                break;

            case TokenType.StringValue:
                output = new StringExpression()
                {
                    Value = token.Value
                };
                break;

            case TokenType.FloatValue:
                output = new FloatExpression()
                {
                    Value = float.Parse(token.Value)
                };
                break;

            default:
                throw new Exception("Unexpected token for constant!");
            }
            return(output);
        }
コード例 #12
0
        public void NumberExpressionTest()
        {
            string           numbertest = "5";
            NumberExpression number     = new NumberExpression(numbertest);

            Assert.AreEqual(number.ToString(), "5");
        }
コード例 #13
0
        public void Equals_DifferentNumber_Test()
        {
            var num1 = new NumberExpression <double>(1.1);
            var num2 = 1.2;

            Assert.IsFalse(num1.Equals(num2));
        }
コード例 #14
0
 public void ByteValuesShouldBeMappedProperly()
 {
     for (int i = 0; i < 256; i++)
     {
         Assert.Equal(i, NumberExpression.Create(checked ((byte)i)).Value);
     }
 }
コード例 #15
0
ファイル: MultiplyTests.cs プロジェクト: QuantumCores/Mathema
        public void Multiply_Number_FlatAdd()
        {
            //Arrange
            var expected = new FlatAddExpression();

            expected.Add(new VariableExpression("u", 2));
            expected.Add(new NumberExpression(3));
            expected.Count = new Complex(12, 0);
            expected.Execute();

            var c = new NumberExpression(3);
            var n = new FlatAddExpression();

            n.Add(new VariableExpression("u", 2));
            n.Add(new NumberExpression(3));
            n.Count = new Complex(4, 0);
            var expr = new BinaryExpression(c, OperatorTypes.Multiply, n);

            //Act
            var actual = expr.Execute();

            //Assert
            Assert.AreEqual(expected.Count.Re.ToNumber(), actual.Count.Re.ToNumber());
            Assert.AreEqual(expected.Count.Im.ToNumber(), actual.Count.Im.ToNumber());
        }
コード例 #16
0
ファイル: AstCompileVisitor.cs プロジェクト: Rohansi/LoonyC
        public FrameResource Visit(NumberExpression expression)
        {
            var res = _frame.Allocate(new PrimitiveType(Primitive.Int));

            _context.Emit(new Instruction(Opcode.Mov, res.Operand, new ImmediateOperand(expression.Value)));

            return(res);
        }
コード例 #17
0
        /// <summary>
        /// Creates a tree for math expression represented in Infix notation.
        /// </summary>
        /// <param name="s">String representing math expression in Infix notation.</param>
        /// <returns>Built expression.</returns>
        public MathExpression Build(string s)
        {
            if (string.IsNullOrEmpty(s))
            {
                throw new ArgumentException("Value cannot be null or empty.", nameof(s));
            }

            // Convert expression to use Reverse Polish (postfix) notation
            var notationConverter = new ExpressionNotationConverter();
            var rpnExprStr        = notationConverter.ToReversePolishNotation(s);

            var stack = new Stack <MathExpression>();

            string token;
            var    index = 0;

            while ((token = ReadNextToken(rpnExprStr, ref index)) != null)
            {
                MathExpression expr;

                var tokenKind = GetTokenKind(token);
                switch (tokenKind)
                {
                case TokenKind.Number:
                    expr = new NumberExpression(token);
                    break;

                case TokenKind.Addition:
                    expr = new AdditionExpression(GetChildExpressions(stack, 2, tokenKind));
                    break;

                case TokenKind.Subtraction:
                    expr = new SubtractionExpression(GetChildExpressions(stack, 2, tokenKind));
                    break;

                case TokenKind.Multiplication:
                    expr = new MultiplicationExpression(GetChildExpressions(stack, 2, tokenKind));
                    break;

                case TokenKind.Division:
                    expr = new DivisionExpression(GetChildExpressions(stack, 2, tokenKind));
                    break;

                default:
                    throw new ArgumentOutOfRangeException($"Unexpected token kind: '{tokenKind}'.");
                }

                stack.Push(expr);
            }

            if (stack.Count != 1)
            {
                throw new InvalidOperationException("Incorrect math expression.");
            }

            return(stack.Pop());
        }
コード例 #18
0
 // Commons as ITTEExpression
 bool Number(out ITTEExpression numberExpression)
 {
     if (Double(out double value))
     {
         numberExpression = new NumberExpression(value);
         return(true);
     }
     numberExpression = null;
     return(false);
 }
コード例 #19
0
ファイル: CloneTests.cs プロジェクト: QuantumCores/Mathema
        public void Clone_NumberExpression()
        {
            //Arrange
            var expression = new NumberExpression(-2);

            //Act
            var clone = (NumberExpression)expression.Clone();

            //Assert
            Assert.AreEqual(expression.Count.Re.ToNumber(), clone.Count.Re.ToNumber());
        }
コード例 #20
0
        private static bool TyeGetNumberExpression(ITokenizer tokenizer, out IExpression numberExpression)
        {
            numberExpression = null;

            if (tokenizer.CurrentToken.Number.HasValue)
            {
                numberExpression = new NumberExpression(tokenizer.CurrentToken.Number.Value);

                tokenizer.NextToken();
            }

            return(numberExpression != null);
        }
コード例 #21
0
ファイル: PowerTests.cs プロジェクト: QuantumCores/Mathema
        public void Pow_Complex_0()
        {
            //Arrange
            var expected = new NumberExpression(1);
            var c        = new ComplexExpression(-2, 3);
            var n        = new NumberExpression(0);
            var expr     = new BinaryExpression(c, OperatorTypes.Power, n);

            //Act
            var actual = (NumberExpression)expr.Execute();

            //Assert
            Assert.AreEqual(expected.Count.Re.ToNumber(), actual.Count.Re.ToNumber());
        }
コード例 #22
0
ファイル: CloneTests.cs プロジェクト: QuantumCores/Mathema
        public void Clone_BinaryExpression()
        {
            //Arrange
            var expr1  = new NumberExpression(-2);
            var expr2  = new NumberExpression(3);
            var actual = new BinaryExpression(expr1, OperatorTypes.Power, expr2);

            //Act
            var expected = (BinaryExpression)actual.Clone();

            //Assert
            Assert.IsTrue(!Object.ReferenceEquals(actual, expected));
            Assert.AreEqual(actual.Execute().Count.Re.ToNumber(), expected.Execute().Count.Re.ToNumber());
        }
コード例 #23
0
ファイル: SubtractTests.cs プロジェクト: QuantumCores/Mathema
        public void Subtract_Complex_ResultAsNumber()
        {
            //Arrange
            var expected = new NumberExpression(1);
            var c        = new ComplexExpression(2, 3);
            var n        = new ComplexExpression(1, 3);
            var expr     = new BinaryExpression(c, OperatorTypes.Subtract, n);

            //Act
            var actual = (NumberExpression)expr.Execute();

            //Assert
            Assert.AreEqual(expected.Count.Re.ToNumber(), actual.Count.Re.ToNumber());
        }
コード例 #24
0
        public void NumberExpressionInterpretIsNotModified()
        {
            string         constVariable = "z";
            int            constValue    = 5;
            int            returnValue   = 0;
            ContextGrammar context       = new ContextGrammar();
            IExpression    expression    = new NumberExpression(constVariable);

            context.SetVariable(constVariable, constValue);

            returnValue = expression.Interpret(context);

            Assert.AreEqual(constValue, returnValue);
        }
コード例 #25
0
        public Linq.Expression Reverse(Expression expr)
        {
            if (expr is NumberExpression)
            {
                NumberExpression nexpr = (NumberExpression)expr;
                return(Linq.Expression.Constant(nexpr.Value));
            }
            else if (expr is VariableExpression)
            {
                VariableExpression vexpr = (VariableExpression)expr;
                return(Linq.Expression.Parameter(typeof(double), vexpr.Name));
            }
            else if (expr is FunctionExpression)
            {
                FunctionExpression fexpr = (FunctionExpression)expr;

                IList <Linq.Expression> arguments = new List <Linq.Expression>();

                foreach (Expression arg in fexpr.Arguments)
                {
                    arguments.Add(Reverse(arg));
                }

                if (!exists(fexpr.Name))
                {
                    throw new Exception("Method name doesn't exist in the scope");
                }

                MethodInfo method = get(fexpr.Name);

                return(Linq.Expression.Call(method, arguments));
            }
            else if (expr is BinaryExpression)
            {
                BinaryExpression bexpr = (BinaryExpression)expr;

                Linq.Expression left  = Reverse(bexpr.Left);
                Linq.Expression right = Reverse(bexpr.Right);

                if (bexpr.Operator == Binary.Power)
                {
                    return(Linq.Expression.Call(powMethod, left, right));
                }

                return(Linq.Expression.MakeBinary(getOperator(bexpr.Operator), left, right));
            }

            throw new Exception("Can't reverse expression");
        }
コード例 #26
0
ファイル: MultiplyTests.cs プロジェクト: QuantumCores/Mathema
        public void Multiply_Number_Complex()
        {
            //Arrange
            var expected = new ComplexExpression(2, -6);
            var c        = new NumberExpression(2);
            var n        = new ComplexExpression(1, -3);
            var expr     = new BinaryExpression(c, OperatorTypes.Multiply, n);

            //Act
            var actual = (ComplexExpression)expr.Execute();

            //Assert
            Assert.AreEqual(expected.Count.Re.ToNumber(), actual.Count.Re.ToNumber());
            Assert.AreEqual(expected.Count.Im.ToNumber(), actual.Count.Im.ToNumber());
        }
コード例 #27
0
ファイル: MultiplyTests.cs プロジェクト: QuantumCores/Mathema
        public void Multiply_Number_Function()
        {
            //Arrange
            var expected = new CotExpression(new VariableExpression("x", 1), 12);
            var c        = new NumberExpression(3);
            var n        = new CotExpression(new VariableExpression("x", 1), 4);
            var expr     = new BinaryExpression(c, OperatorTypes.Multiply, n);

            //Act
            var actual = expr.Execute();

            //Assert
            Assert.AreEqual(expected.Count.Re.ToNumber(), actual.Count.Re.ToNumber());
            Assert.AreEqual(expected.Count.Im.ToNumber(), actual.Count.Im.ToNumber());
        }
コード例 #28
0
ファイル: MultiplyTests.cs プロジェクト: QuantumCores/Mathema
        public void Multiply_Number_NegativeNumber()
        {
            //Arrange
            var expected = new NumberExpression(-4);
            var c        = new NumberExpression(-2);
            var n        = new NumberExpression(2);
            var expr     = new BinaryExpression(c, OperatorTypes.Multiply, n);

            //Act
            var actual = expr.Execute();

            //Assert
            Assert.AreEqual(expected.Count.Re.ToNumber(), actual.Count.Re.ToNumber());
            Assert.AreEqual(expected.Count.Im.ToNumber(), actual.Count.Im.ToNumber());
        }
コード例 #29
0
        public void Add_Complex_NegativeNumber()
        {
            //Arrange
            var expected = new ComplexExpression(1, 3);
            var c        = new ComplexExpression(2, 3);
            var n        = new NumberExpression(-1);
            var expr     = new BinaryExpression(c, OperatorTypes.Add, n);

            //Act
            var actual = (ComplexExpression)expr.Execute();

            //Assert
            Assert.AreEqual(expected.Count.Re.ToNumber(), actual.Count.Re.ToNumber());
            Assert.AreEqual(expected.Count.Im.ToNumber(), actual.Count.Im.ToNumber());
        }
コード例 #30
0
ファイル: Analyzer.cs プロジェクト: nsr0776/Nero
        /// <summary>
        /// Parses S-Expressions and builds an internal representation.
        /// Named after the 'analyze procedure from SICP #4.1.7.
        /// </summary>
        /// <param name="sExpr"></param>
        /// <returns></returns>
        public static Expression Analyze(SExpression sExpression)
        {
            // Dispatch on S-Expression's type

            if (sExpression is SAtom atom)
            {
                if (NumberExpression.IsInstance(atom))
                {
                    return(NumberExpression.Analyze(atom));
                }
                else if (StringExpression.IsInstance(atom))
                {
                    return(StringExpression.Analyze(atom));
                }
                else if (BooleanExpression.IsInstance(atom))
                {
                    return(BooleanExpression.Analyze(atom));
                }
                else
                {
                    return(Variable.Analyze(atom));
                }
            }
            else
            {
                var list = (SList)sExpression;
                if (list.Count == 0)
                {
                    throw new BadSyntaxException("procedure application", "Empty application", list.Text);
                }

                string head = list[0].Text;

                if (SpecialForm.Table.ContainsKey(head))
                {
                    // $list is a special form

                    Func <SList, SpecialForm> spFormAnalyzer = SpecialForm.Table[head];
                    return(spFormAnalyzer(list));
                }
                else
                {
                    // $list is a procedure application

                    return(Application.Analyze(list));
                }
            }
        }
コード例 #31
0
        public void NumberExpressionProducesNumbers()
        {
            NumberExpression n1 = new NumberExpression(1.0);
            NumberExpression n2 = new NumberExpression(12);
            NumberExpression n3 = new NumberExpression(0.5);
            NumberExpression n4 = new NumberExpression(-58);

            Assert.AreEqual("1;", n1.ToString());
            Assert.AreEqual("12;", n2.ToString());
            Assert.AreEqual("0.5;", n3.ToString());
            Assert.AreEqual("-58;", n4.ToString());

            n4.Value = n4.Value + 1;

            Assert.AreEqual("-57;", n4.ToString());
        }
コード例 #32
0
 public Expression Add(NumberExpression expr)
 {
     return Number(val + expr.Value);
 }
コード例 #33
0
ファイル: Parser.cs プロジェクト: WMeszar/Cottle
        private IExpression ParseExpression()
        {
            List<IExpression>                               arguments;
            List<KeyValuePair<IExpression, IExpression>>    elements;
            IExpression                                     expression;
            int                                             index;
            IExpression                                     key;
            decimal                                         number;
            IExpression                                     value;

            switch (this.lexer.Current.Type)
            {
                case LexemType.BracketBegin:
                    elements = new List<KeyValuePair<IExpression, IExpression>> ();
                    index = 0;

                    for (this.lexer.Next (LexerMode.BLOCK); this.lexer.Current.Type != LexemType.BracketEnd; )
                    {
                        key = this.ParseExpression ();

                        if (this.lexer.Current.Type == LexemType.Colon)
                        {
                            this.lexer.Next (LexerMode.BLOCK);

                            value = this.ParseExpression ();
                        }
                        else
                        {
                            value = key;
                            key = new NumberExpression (index++);
                        }

                        elements.Add (new KeyValuePair<IExpression, IExpression> (key, value));

                        if (this.lexer.Current.Type == LexemType.Comma)
                            this.lexer.Next (LexerMode.BLOCK);
                    }

                    this.lexer.Next (LexerMode.BLOCK);

                    expression = new ArrayExpression (elements);

                    break;

                case LexemType.Number:
                    expression = new NumberExpression (decimal.TryParse (this.lexer.Current.Content, out number) ? number : 0);

                    this.lexer.Next (LexerMode.BLOCK);

                    break;

                case LexemType.String:
                    expression = new StringExpression (this.lexer.Current.Content);

                    this.lexer.Next (LexerMode.BLOCK);

                    break;

                case LexemType.Literal:
                    expression = this.ParseName ();

                    break;

                default:
                    throw new UnexpectedException (this.lexer, "expression");
            }

            while (true)
            {
                switch (this.lexer.Current.Type)
                {
                    case LexemType.BracketBegin:
                        this.lexer.Next (LexerMode.BLOCK);

                        value = this.ParseExpression ();

                        if (this.lexer.Current.Type != LexemType.BracketEnd)
                            throw new UnexpectedException (this.lexer, "array index end (']')");

                        this.lexer.Next (LexerMode.BLOCK);

                        expression = new AccessExpression (expression, value);

                        break;

                    case LexemType.Dot:
                        this.lexer.Next (LexerMode.BLOCK);

                        if (this.lexer.Current.Type != LexemType.Literal)
                            throw new UnexpectedException (this.lexer, "field name");

                        expression = new AccessExpression (expression, new StringExpression (this.lexer.Current.Content));

                        this.lexer.Next (LexerMode.BLOCK);

                        break;

                    case LexemType.ParenthesisBegin:
                        arguments = new List<IExpression> ();

                        for (this.lexer.Next (LexerMode.BLOCK); this.lexer.Current.Type != LexemType.ParenthesisEnd; )
                        {
                            arguments.Add (this.ParseExpression ());

                            if (this.lexer.Current.Type == LexemType.Comma)
                                this.lexer.Next (LexerMode.BLOCK);
                        }

                        this.lexer.Next (LexerMode.BLOCK);

                        expression = new CallExpression (expression, arguments);

                        break;

                    default:
                        return expression;
                }
            }
        }
コード例 #34
0
 public Expression Divide(NumberExpression expr)
 {
     return Number(val / expr.Value);
 }
コード例 #35
0
 public Expression Multiply(NumberExpression expr)
 {
     return Number(val * expr.Value);
 }
コード例 #36
0
        /// <summary>
        /// Finds the first instance of currentOperator (i.e. '+'), takes the operands on the left and right
        /// to the operator and builds an Expression instance (i.e. AddExpression in case of '+').
        /// </summary>
        /// <param name="expression">A list containing numbers, operators and expressions.</param>
        /// <param name="currentOperator">The symbol of the current operator to be processed.</param>
        private static void CreateExpression(List<dynamic> expression, char currentOperator)
        {
            int operatorIndex = expression.IndexOf(currentOperator);
            Expression operation;
            dynamic leftOperand, rightOperand;
            try
            {
                if (expression.ElementAt(operatorIndex - 1) is double)
                {
                    leftOperand = new NumberExpression(expression.ElementAt(operatorIndex - 1));
                }
                else if (expression.ElementAt(operatorIndex - 1) is Expression)
                {
                    leftOperand = expression.ElementAt(operatorIndex - 1);
                }
                else
                {
                    throw new ArgumentException("Invalid expression string.");
                }

                if (expression.ElementAt(operatorIndex + 1) is double)
                {
                    rightOperand = new NumberExpression(expression.ElementAt(operatorIndex + 1));
                }
                else if (expression.ElementAt(operatorIndex + 1) is Expression)
                {
                    rightOperand = expression.ElementAt(operatorIndex + 1);
                }
                else
                {
                    throw new ArgumentException("Invalid expression string.");
                }
            }
            catch (Exception ex)
            {
                
                throw new ArgumentException("Invalid expression string.");
            }

            switch (currentOperator)
            {
                case '+':
                    operation = new AddExpression(leftOperand, rightOperand);
                    break;
                case '-':
                    operation = new SubtractExpression(leftOperand, rightOperand);
                    break;
                case '*':
                    operation = new MultiplyExpression(leftOperand, rightOperand);
                    break;
                case '/':
                    operation = new DivideExpression(leftOperand, rightOperand);
                    break;
                default:
                    operation = new NumberExpression(0);
                    break;
            }

            expression.RemoveAt(operatorIndex + 1);
            expression.RemoveAt(operatorIndex);
            expression.RemoveAt(operatorIndex - 1);
            expression.Insert(operatorIndex - 1, operation);
        }
コード例 #37
0
 public Expression Subtract(NumberExpression expr)
 {
     return Number(val - expr.Value);
 }
コード例 #38
0
 public Expression Power(NumberExpression expr)
 {
     return Number(System.Math.Pow(val, expr.Value));
 }