private LispNumericAtom random(LispNumericAtom limit)
 {
     if (limit.IsDecimal)
     {
         return(new LispNumericAtom((new Random().NextDouble() * limit).ToString()));
     }
     return(new LispNumericAtom(new Random().Next() % limit));
 }
 private LispNumericAtom log(LispNumericAtom number, LispNumericAtom baseNumber = null)
 {
     if (baseNumber == null)
     {
         return(new LispNumericAtom(Math.Log(number).ToString()));
     }
     return(new LispNumericAtom(Math.Log(number, baseNumber).ToString()));
 }
 private LispDataType morethan(LispNumericAtom a1, LispNumericAtom a2)
 {
     if (a1 > a2)
     {
         return(new LispSymbolicAtom("T"));
     }
     return(new LispList());
 }
 private LispDataType notequals(LispNumericAtom a1, LispNumericAtom a2)
 {
     if (a1 != a2)
     {
         return(new LispSymbolicAtom("T"));
     }
     return(new LispList());
 }
 private LispDataType zerop(LispNumericAtom n)
 {
     if (n == 0)
     {
         return(new LispSymbolicAtom("T"));
     }
     else
     {
         return(new LispList());
     }
 }
 private LispDataType plusp(LispNumericAtom n)
 {
     if (!n.IsNegative)
     {
         return(new LispSymbolicAtom("T"));
     }
     else
     {
         return(new LispList());
     }
 }
 private LispNumericAtom cos(LispNumericAtom number)
 {
     return(new LispNumericAtom(Math.Cos(number).ToString()));
 }
 private LispNumericAtom abs(LispNumericAtom number)
 {
     return(LispNumericAtom.abs(number));
 }
 private LispNumericAtom sqrt(LispNumericAtom number)
 {
     return(new LispNumericAtom(Math.Sqrt(number).ToString()));
 }
 private LispNumericAtom exp(LispNumericAtom number)
 {
     return(new LispNumericAtom(Math.Exp(number).ToString()));
 }
 private LispNumericAtom add(LispNumericAtom a1, LispNumericAtom a2)
 {
     return(a1 + a2);
 }
 private LispNumericAtom round(LispNumericAtom number)
 {
     return(number.Round());
 }
 private LispNumericAtom divide(LispNumericAtom a1, LispNumericAtom a2)
 {
     return(a1 / a2);
 }
 private LispNumericAtom multiply(LispNumericAtom a1, LispNumericAtom a2)
 {
     return(a1 * a2);
 }
 private LispNumericAtom subtract(LispNumericAtom a1, LispNumericAtom a2)
 {
     return(a1 - a2);
 }
 private LispNumericAtom atan(LispNumericAtom number)
 {
     return(new LispNumericAtom(Math.Atan(number).ToString()));
 }
 private LispNumericAtom mod(LispNumericAtom n1, LispNumericAtom n2)
 {
     return(n1 % n2);
 }
 private LispNumericAtom gcd(LispNumericAtom a, LispNumericAtom b)
 {
     return(b == 0 ? a : gcd(b, a % b));
 }
 private LispNumericAtom expt(LispNumericAtom number, LispNumericAtom power)
 {
     return(new LispNumericAtom(Math.Pow(number, power).ToString()));
 }
Exemple #20
0
 public LispInterpreter()
 {
     // Intialize predefined globals.
     LispGlobals["PI"] = new LispNumericAtom("3.14159265358979323846");
 }