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())); }
public LispInterpreter() { // Intialize predefined globals. LispGlobals["PI"] = new LispNumericAtom("3.14159265358979323846"); }