Example #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);
     }
 }
Example #2
0
File: Add.cs Project: 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;
        }
Example #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);
     }
 }
Example #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);
            }
        }
Example #5
0
 public override bool NumberEquals(LispInteger number)
 {
     return Value == number.Value;
 }
Example #6
0
 public abstract LispNumber Multiply(LispInteger factor);
Example #7
0
 public abstract LispNumber DivideBy(LispInteger divisor);
Example #8
0
 public abstract LispNumber Add(LispInteger addend);
Example #9
0
 public override LispNumber Add(LispInteger addend)
 {
     return new LispBigInteger(addend).Add(this);
 }
Example #10
0
 public LispBigInteger(LispInteger value)
 {
     this.Value = value.Value;
 }
Example #11
0
 public override bool NumberEquals(LispInteger number)
 {
     return NumberEquals(number, this);
 }
Example #12
0
 public override LispNumber Multiply(LispInteger factor)
 {
     return Multiply(this, (LispBigInteger)factor);
 }
Example #13
0
 public override int CompareTo(LispInteger number)
 {
     return Value.CompareTo(number.Value);
 }
Example #14
0
 public override LispNumber Add(LispInteger addend)
 {
     return Add(this, addend);
 }
Example #15
0
 protected static bool NumberEquals(LispInteger a, LispBigInteger b)
 {
     return (BigInteger)a.Value == b.Value;
 }
Example #16
0
 protected static bool NumberEquals(LispInteger a, LispDouble b)
 {
     return a.Value == b.Value;
 }
Example #17
0
 public override int CompareTo(LispInteger number)
 {
     return -Compare(number, this);
 }
Example #18
0
 public abstract int CompareTo(LispInteger number);
Example #19
0
 public override LispNumber DivideBy(LispInteger divisor)
 {
     return Divide(this, (LispBigInteger)divisor);
 }
Example #20
0
 public abstract LispNumber DivideInto(LispInteger dividend);
Example #21
0
 public override LispNumber DivideInto(LispInteger dividend)
 {
     return Divide((LispBigInteger)dividend, this);
 }
Example #22
0
 public abstract bool NumberEquals(LispInteger number);
Example #23
0
 protected static int Compare(LispInteger a, LispDouble b)
 {
     return ((double)a.Value).CompareTo(b.Value);
 }
Example #24
0
 protected static int Compare(LispInteger a, LispBigInteger b)
 {
     return ((BigInteger)a.Value).CompareTo(b.Value);
 }
Example #25
0
 public LispDouble(LispInteger integer)
 {
     this.Value = integer.Value;
 }