Пример #1
0
 protected static LispNumber Add(LispInteger a, LispInteger b)
 {
     try
     {
         var sum = checked(a.Value + b.Value);
         return MakeNumber(sum);
     }
     catch (OverflowException)
     {
         return new LispBigInteger((BigInteger)a.Value + b.Value);
     }
 }
Пример #2
0
Файл: Add.cs Проект: nja/keel
        public override LispObject Apply(Cons argumentsValues, LispEnvironment env)
        {
            LispNumber sum = new LispInteger(0);

            foreach (var addend in argumentsValues)
            {
                var num = addend.As<LispNumber>();
                sum = sum.Add(num);
            }

            return sum;
        }
Пример #3
0
 protected static LispNumber Multiply(LispInteger a, LispInteger b)
 {
     try
     {
         int product = checked(a.Value * b.Value);
         return MakeNumber(product);
     }
     catch (OverflowException)
     {
         BigInteger product = (BigInteger)a.Value * b.Value;
         return MakeNumber(product);
     }
 }
Пример #4
0
        protected static LispNumber Divide(LispInteger dividend, LispInteger divisor)
        {
            try
            {
                checked
                {
                    int remainder;
                    int quotient = Math.DivRem(dividend.Value, divisor.Value, out remainder);

                    if (remainder != 0)
                    {
                        return Divide((LispDouble)dividend, (LispDouble)divisor);
                    }

                    return MakeNumber(quotient);
                }
            }
            catch (OverflowException)
            {
                return Divide((LispBigInteger)dividend, (LispBigInteger)divisor);
            }
        }
Пример #5
0
 public override bool NumberEquals(LispInteger number)
 {
     return Value == number.Value;
 }
Пример #6
0
 public abstract LispNumber Multiply(LispInteger factor);
Пример #7
0
 public abstract LispNumber DivideBy(LispInteger divisor);
Пример #8
0
 public abstract LispNumber Add(LispInteger addend);
Пример #9
0
 public override LispNumber Add(LispInteger addend)
 {
     return new LispBigInteger(addend).Add(this);
 }
Пример #10
0
 public LispBigInteger(LispInteger value)
 {
     this.Value = value.Value;
 }
Пример #11
0
 public override bool NumberEquals(LispInteger number)
 {
     return NumberEquals(number, this);
 }
Пример #12
0
 public override LispNumber Multiply(LispInteger factor)
 {
     return Multiply(this, (LispBigInteger)factor);
 }
Пример #13
0
 public override int CompareTo(LispInteger number)
 {
     return Value.CompareTo(number.Value);
 }
Пример #14
0
 public override LispNumber Add(LispInteger addend)
 {
     return Add(this, addend);
 }
Пример #15
0
 protected static bool NumberEquals(LispInteger a, LispBigInteger b)
 {
     return (BigInteger)a.Value == b.Value;
 }
Пример #16
0
 protected static bool NumberEquals(LispInteger a, LispDouble b)
 {
     return a.Value == b.Value;
 }
Пример #17
0
 public override int CompareTo(LispInteger number)
 {
     return -Compare(number, this);
 }
Пример #18
0
 public abstract int CompareTo(LispInteger number);
Пример #19
0
 public override LispNumber DivideBy(LispInteger divisor)
 {
     return Divide(this, (LispBigInteger)divisor);
 }
Пример #20
0
 public abstract LispNumber DivideInto(LispInteger dividend);
Пример #21
0
 public override LispNumber DivideInto(LispInteger dividend)
 {
     return Divide((LispBigInteger)dividend, this);
 }
Пример #22
0
 public abstract bool NumberEquals(LispInteger number);
Пример #23
0
 protected static int Compare(LispInteger a, LispDouble b)
 {
     return ((double)a.Value).CompareTo(b.Value);
 }
Пример #24
0
 protected static int Compare(LispInteger a, LispBigInteger b)
 {
     return ((BigInteger)a.Value).CompareTo(b.Value);
 }
Пример #25
0
 public LispDouble(LispInteger integer)
 {
     this.Value = integer.Value;
 }